难点1: 搞清楚左右边界
难点2: 写合适的if condition
基础
Classical Binary Search [easy]
int findPosition(vector<int> &nums, int target) {
int l=0, r=nums.size();
while(l<r){
int mid = l+(r-l)/2;
if(nums[mid]==target) return mid;
else if(target>nums[mid]) l= mid+1;
else r=mid;
}
return -1;
}First Position of Target [easy] (lower_bound)
int binarySearch(vector<int> &nums, int target) {
int l=0, r=nums.size()-1;
while(l<r){
int mid = l+(r-l)/2;
if(nums[mid]<target) l=mid+1;
else r=mid;
}
return nums[r]==target ? r:-1;
}Last Position of Target [easy] (upper_bound)
int lastPosition(vector<int> &nums, int target) {
if(nums.empty()) return -1;
int l=0, r=nums.size();
while(l<r){
int mid = l+(r-l)/2;
if(nums[mid]<=target) l=mid+1;
else r=mid;
}
return nums[r-1]==target ? r-1:-1;
}
改变if condition
First Bad Version [median]
Search In a Big Sorted Array [median] (难点:确定upper bound)
Find Minimum in Rotated Sorted Array [median], II [median] (with duplicate, 难点:nums[mid]==nums[r])
Maximum Number in Mountain Sequence [median] (one peak)
Find Peak Element [median](one of multiple peaks), II [hard] (matrix)
Search in Rotated Sorted Array [median]
同一问题重复使用BS
Search a 2D Matrix [easy], II [median] (a special trick)
Search for a Range [median]
Smallest Rectangle Enclosing Black Pixels [hard] (难点:1.if condition 2.用一个binary search归纳4个)
Rotate Array
Recover Rotated Sorted Array
Rotate String
版权声明:本文为real_lisa原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。