面试代码基础(二)二分法binary Search Sorted Array

二分法总结:满足某个条件的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

行递增  列递增

思考:从左下角考虑

可以删掉一行或者一列!!!

posted @ 2020-01-22 13:54  奋斗中的菲比  阅读(240)  评论(0编辑  收藏  举报