Binary Search:162. Find Peak Element

来源:互联网 发布:js控制标签显示隐藏 编辑:程序博客网 时间:2024/06/05 11:59

这道题是说,给一个数组,这个数组里有好几个局部最大值,找出一个局部最大值返回其下标。数组两边都认为是负无穷。

首先想到了暴力的方法:

class Solution {public:    int findPeakElement(vector<int>& nums) {        int i = 1;        for(; i < nums.size(); ++i)        {            if(nums[i] < nums[i-1]) break;        }        return i-1;    }};

实际上这个题考查的是二分搜索。首先找到左右的中点mid位置,如果nums[mid]和nums[mid+1]构成的是一个上坡,那么说明峰值在mid的右边;如果nums[mid]和nums[mid+1]构成的是一个下坡,说明峰值在mid的左边。

class Solution {public:    int findPeakElement(vector<int>& nums) {        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 left;    }};


原创粉丝点击