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之后一定存在峰值元素

  • 添加两个虚拟左右端点,二分查找

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;elsei = mid+1;}return mid-1;//原数组移动了一位}
};

LeetCode 162. 寻找峰值(二分查找)相关推荐

  1. java 寻找峰值峰谷_Java实现 LeetCode 162 寻找峰值

    162. 寻找峰值 峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引. 数组可能包含多个峰值,在这种情况下,返 ...

  2. LeetCode 162. 寻找峰值

    为什么二分查找大的那一半一定会有峰值呢?(即nums[mid]<nums[mid+1]时,mid+1~N一定存在峰值) 我的理解是,首先已知 nums[mid+1]>nums[mid],那 ...

  3. Leetcode 162. 寻找峰值 解题思路及C++实现

    解题思路: 这道题应该归为简单,只要找到第一个降序的值就可以了. class Solution { public:int findPeakElement(vector<int>& ...

  4. python寻峰,[LeetCode][Python]162. 寻找峰值

    [LeetCode][Python]162. 寻找峰值 峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引. 数 ...

  5. leetcode刷题笔记——二分查找

    leetcode刷题笔记--二分查找 目前完成的贪心相关的leetcode算法题序号: 中等:80,81 困难:4 来源:力扣(LeetCode) 链接:https://leetcode-cn.com ...

  6. LeetCode简单题之二分查找

    题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...

  7. 5、leetcode剑指offer53 二分查找之0~n-1缺失的数字**

    leetcode剑指offer53 二分查找之0~n-1缺失的数字 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一个 ...

  8. leetcode刷题 162.寻找峰值

    题目分析: 通过题目,我们发现这题的本质是寻找一段数组范围内的最大值,我们可以通过不断的缩小数组范围来寻找目标值,由缩小数组范围我们可以联想到二分查找,但是此二分查找有一不同点,就是中值不是同左右界值 ...

  9. Leetcode中几道二分查找(Binary Search)的算法题总结

    二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列.二分查找法的时间复杂度是对数级别的,O(lo ...

最新文章

  1. springboot源码 红色J_通达信副图指标源码之,出手就赢
  2. 如何使用CNN进行物体识别和分类_可能我们之前都想错了:CNN的图像分类策略其实出奇的简单呢!...
  3. UML该元素的行为为基础的元素
  4. 如何打造顶级目标检测算法?百度官方揭秘 ECCV2020 双料冠军的理论与实践
  5. 深入学习Spring框架(二)- 注解配置
  6. mysql的读写分离技术_mysql 读写分离方法
  7. 计算机html基础试题与答案,2019年大学计算机基础试题题库及答案.docx
  8. css属性中如果后面个三个值,那么中间的那个一般代表左右元素的值。
  9. android编译make错误——javalib.jar invalid header field”、classes-full-debug.jar 错误 41 ...
  10. PHP file_get_contents(‘php://input‘) 和POST的区别
  11. 《深入理解Nginx》 学习笔记(一)
  12. 推荐系统(Recommendation System )介绍
  13. 人行征信报告介绍(一)
  14. 象棋世家 v6.0a 官方
  15. speedoffice(Word)如何给文字添加下划线
  16. 怎么去视频水印?一键去除视频水印
  17. rule of thumb - “经验法则”或者“拇指规则”
  18. ecshop数据字典
  19. android 使用SAF框架操作外置sd卡
  20. 计算机网络ping作用是什么,ping

热门文章

  1. C/C++宏的使用总结
  2. 驱动框架3——在内核中添加或去除某个驱动
  3. Python实现比较两个列表(list)范围
  4. unique离散化用法
  5. 地铁客流检测训练问题记录
  6. BZOJ 4259: 残缺的字符串 [FFT]
  7. EBS业务学习之应收管理
  8. 转 php 观察者模式
  9. 复制文本框内容至剪贴板
  10. IBM软件服务创新运用 提升市民生活质量