简历投递一天

This commit is contained in:
Estom
2021-08-23 22:53:15 +08:00
parent 4ed6ee6517
commit fb01b19088
7 changed files with 304 additions and 13 deletions

View File

@@ -0,0 +1,99 @@
class Solution {
public:
double findone(vector<int>&nums){
int n = nums.size();
if(n==1)return nums[0];
if(n%2==1){
return nums[(n-1)/2];
}
else{
// cout<< nums[(n-1)/2]<<endl;
return (nums[(n-1)/2]+nums[(n-1)/2+1])/2;
}
}
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int n1 = nums1.size(),n2=nums2.size();
int i=0,j=0,n=n1+n2;
while(i+j<n/2){
if(nums1[i]<nums2[j] && i<n1 || j>=n2){
i++;
}
else if(j<n2){
j++;
}
}
}
double findMedianSortedArrays2(vector<int>& nums1, vector<int>& nums2) {
// 一种新的二分查找。每次排除掉两个数组的1/4。直接扫描两遍也行这个数据规模爆搜吧。
int n1 = nums1.size(),n2=nums2.size();
int l1=0,m1=0,r1=n1-1;
int l2=0,m2=0,r2=n2-1;
m1 = (l1+r1)/2;
m2 = (l2+r2)/2;
int n = n1+n2;
int *m,*l,*r;
// 特殊情况的讨论
if(n1==0){
return findone(nums2);
}
if(n2==0){
return findone(nums1);
}
if(n1==1){
nums2.push_back(nums1[0]);
sort(nums2.begin(),nums2.end());
return findone(nums2);
}
if(n2==1){
nums1.push_back(nums2[0]);
sort(nums1.begin(),nums1.end());
// for(auto a : nums1){
// cout<<a<<" ";
// }
return findone(nums1);
}
// 保证左边的元素小于等于右
while(true){
// 终止搜索的条件。l1和l2不需要相邻。都完成二分搜索后只剩下两个数。
if(r1-l1<=1 && r2-l2<=1){
cout<<l1<<" "<<r1<<" "<<l2<<" "<<r2<<endl;
vector<int> temp{nums1[l1],nums1[r1],nums2[l2],nums2[r2]};
sort(temp.begin(),temp.end());
int left = l1+l2;
int right = n-r1-r2-2;
int index = ((right-left)+3)/2;
if(n%2==1){
return temp[index];
}
else{
return (temp[index]+temp[index+1])/2.0;
}
}
// 继续搜索排除掉1/4的方法.暂不考虑相等
// 选择做二分的数组
if(nums1[m1]<nums2[m2] && m1+m2<n/2 && r1-l1>1 || nums1[m1]>nums2[m2] && m1+m2>n/2 && r1-l1>1){
m = &m1;
l=&l1;
r=&r1;
}else if(r2-l2>1){
m = &m2;
l = &l2;
r = &r2;
}
if(m1+m2<n/2){
*l = *m;
*m = (*l+*r)/2;
}
else{
*r = *m;
*m = (*l+*r)/2;
}
}
return 1;
}
};

64
code_segment/my_map.cpp Normal file
View File

@@ -0,0 +1,64 @@
#include<map>
#include<string>
#include<iostream>
using namespace std;
struct Node{
string name;
Node* next;
Node(string _name){
name = _name;
next=nullptr;
}
};
class MyMap{
public:
map<string,Node*> m;
void insert(string s,Node* node){
if(m.count(s)>0){
Node* temp= m[s];
while(temp->next!=nullptr)temp=temp->next;
temp->next = node;
}
else{
m[s] = node;
}
}
Node* find(string s){
if(m.count(s)>0){
return m[s];
}
else{
return nullptr;
}
}
};
int main(){
MyMap mm;
string zhangsan("yanfabu");
Node* nzhangsan=new Node("zhangsan");
string wangyi("yanfabu");
Node* nwangyi = new Node("wangyi");
string lisi("shichangbu");
Node* nlisi =new Node("lisi");
mm.insert(zhangsan,nzhangsan);
mm.insert(wangyi,nwangyi);
mm.insert(lisi,nlisi);
Node* node1 = mm.find("yanfabu");
while(node1!=nullptr){
cout<<node1->name;
node1=node1->next;
}
Node* node2 = mm.find("shichangbu");
while(node2!=nullptr){
cout<<node2->name;
node2=node2->next;
}
return 0;
}

View File

@@ -0,0 +1,37 @@
#include<iostream>
#include<vector>
using namespace std;
// 重载运算符。返回流本身,用于链式法则。如果需要访问私有变量
// 需要声明为友元。一般不需要声明为友元。
ostream & operator<<(ostream &os, const vector<int> temp)
{
for(auto a : temp){
os<<a<<" ";
}
os<<endl;
return os;
}
int main(){
vector<int> arr{-1, 3, -3, 4,5};
cout<<arr<<endl;
vector<int> temp(arr.size()+1,0);
for(int i=0;i<arr.size();i++){
if(arr[i]<arr.size()+1 && arr[i]>0){
temp[arr[i]]=1;
}
}
int i;
for(i=1;i<temp.size();i++){
if(temp[i]==0)break;
}
cout<<i<<endl;
return 0;
}
// 测试一下友元