day11--find

 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;
    }

 

Guess you like

Origin blog.csdn.net/qq_54809548/article/details/130961810