mirror of
https://github.com/Estom/notes.git
synced 2026-04-01 18:11:42 +08:00
简历投递一天
This commit is contained in:
99
code_segment/binary_find.cpp
Normal file
99
code_segment/binary_find.cpp
Normal 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
64
code_segment/my_map.cpp
Normal 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;
|
||||
}
|
||||
37
code_segment/operator_reload.cpp
Normal file
37
code_segment/operator_reload.cpp
Normal 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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 测试一下友元
|
||||
|
||||
Reference in New Issue
Block a user