binary search-I
class Solution {
public:
int search(vector<int>& nums, int target) {
int len=nums.size();
if(len==0)return -1;
int l=0, r=len-1, mid;
while(l<r){
mid=(r+l)/2;
if(nums[mid]>=target) r= mid;
else l=mid+1;
}
if(nums[l]==target) return l;
else return -1;
}
};
Lookup in 2D array
Idea: start searching from the upper right corner, if it is greater than the target value, column --; if it is less than the target value, row ++;
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int m = array.size();//行
if(m==0)return false;
int n = array[0].size();//列
int i=0, j=n-1;
while(i<m && j>=0){
if(array[i][j]>target) j--;
else if(array[i][j]<target) i++;
else return true;
}
return false;
}
};
find the peak
two points
int findPeakElement(vector<int>& nums) {
int len = nums.size();
int l = 0, r = len - 1;
while(l < r){
int mid = (l + r) / 2;
if(nums[mid] < nums[mid+1]) l = mid + 1;
else r = mid;
}
return l;
}