前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 162. 寻找峰值(二分查找)

LeetCode 162. 寻找峰值(二分查找)

作者头像
Michael阿明
发布2020-07-13 15:25:52
8800
发布2020-07-13 15:25:52
举报
文章被收录于专栏:Michael阿明学习之路

1. 题目

峰值元素是指其值大于左右相邻值的元素。

给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。

数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。

你可以假设 nums[-1] = nums[n] = -∞

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-peak-element 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 二分查找

题目假设nums[-1]=nums[n]=-∞

  • 如果nums[i] > nums[i+1],则在i之前一定存在峰值元素
  • 如果nums[i] < nums[i+1],则在i+1之后一定存在峰值元素
在这里插入图片描述
在这里插入图片描述
  • 添加两个虚拟左右端点,二分查找
代码语言:javascript
复制
class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        nums.push_back(INT_MIN);
        reverse(nums.begin(), nums.end());
        nums.push_back(INT_MIN);
        reverse(nums.begin(), nums.end());
        int i = 1, j = nums.size()-2, mid;
        while(i <= j)
        {
        	mid = i+((j-i)>>1);
        	if(nums[mid-1] < nums[mid] && nums[mid] > nums[mid+1])
        		return mid-1;//原数组移动了一位
        	if(nums[mid] > nums[mid+1])
        		j = mid-1;
        	else
        		i = mid+1;
        }
        return mid-1;//原数组移动了一位
    }
};
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 二分查找
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档