1. 162

find-peak-element


2.算法

  • 二分查找
  • O(lgn)

3.算法

* 二分

  • 找到任意一个峰值就可以
  • 二分查找,折半后,
  • 和紧跟的那个元素比较
  • 如果大于紧跟元素,说明峰值在前面,如果小于紧跟,说明峰值在后面
class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        if(nums.empty())  return 0;
        int  left=0,right=nums.size()-1;
        while(left<right){
            int mid=left+(right-left)/2;
            if(nums[mid]<nums[mid+1])  left=mid+1;
            else right=mid;
        }

        return right;

    }
};

* 模拟

  • 从第二个数字开始,
  • 如果某个数字小前面的数字,说明是局部峰值
class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        for(int i=1;i<nums.size()-1;++i)
            if(nums[i]<nums[i-1])
                return i-1;
    }
    return nums.size()-1;
};

results matching ""

    No results matching ""