二分法总结:满足某个条件的first position of。。。。 和 last position of。。。。用二分法
先从二分法开始写:
4点:
1.start+1<end; 退出条件两个相邻了就退出
2.mid=start+(end-start)/2;//防止溢出
3.A[mid] == > <
4.最后判断相邻的两个元素和target的关系
找第一个出现target的位置
if(A.size() == 0){
return -1;
}
int start=0;int end=A.size()-1;
while(start+1<end){
int mid=start+(end-start)/2;
if(target == A[mid]){
end = mid;//find first appear
}
else if(target < A[mid]){
end = mid;
}else if(target > A[mid]){
start=mid;
}
}
if(target == A[start]){
return start;
}
else if(target == A[end]){
return end;
}
return -1;
Search for a range
找first pos last pos
当target == A[mid]
start 和 end怎么挪
1 2 4 4 5
找左边界
在(target == A[mid]){
end=mid;
}
找右边界
(target == A[mid]){
start=mid;
}
寻找插入位置(无重复元素)
第一个大于等于target的下标
在第四点会发生变化~
iftargete)
Search a 2D matrix
行递增 列递增
思考:从左下角考虑
可以删掉一行或者一列!!!