天天看点

162. 寻找峰值———附带思路和详细代码1 题目2 思路3 代码

1 题目

2 思路

  • 考点:二分,

    pair

3 代码

class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int n = nums.size();
        if(n == 1) return 0;

        auto get = [&](int i) ->pair<int, int>{
            if(i == -1 || i == n) return {0, 0};
            else return {1, nums[i]};
        };

        int l = 0, r = n - 1;
        int ans = -1;
        while(l <= r){
            int mid = (l + r) /2;
            if(get(mid) > get(mid - 1) && get(mid) > get(mid + 1)){
                ans = mid;
                break;
            }else if(get(mid - 1)  > get(mid)){
                r = mid - 1;
            }else{
                l = mid + 1;
            }
        }
        return ans;
    }
};

/**
          if (get(mid) < get(mid + 1)) {
                left = mid + 1;
            }
            else {
                right = mid - 1;
            }
**/