文章目录

  • 1 题目理解
  • 2 线性扫描
  • 3 递归二分查找

1 题目理解

输入:int[] nums并且 nums[i]!=nums[i+1]
输出:找到称为峰值的那个数字,返回其下标。
规则:峰值是指:nums[i-1]<nums[i] 并且 nums[i+1]<nums[i]。你可以认为nums[-1] = nums[n] = -∞.只要返回其中的一个峰值下标即可。

2 线性扫描

参考网址
我们可以利用nums[i-1]<nums[i],nums[i+1]<nums[i]找到峰值。当我们遇到一个数字的时候只需要判断nums[i]>nums[i+1]即可。 为什么是这样,下面分三种情况描述。

情况1,所有数字以降序排列。在这种情况下第一个元素就是峰值。我们判断nums[i]>nums[i+1],就得出结论。当然这个时候我们不需要判断nums[i-1]与nums[i]。

情况2:所有元素以上升序列排列。最后一个元素是峰值。在这种情况下我们会一直判断nums[i]与nums[i+1]的关系,一直不符合nums[i]>nums[i+1],所以选择最后一个元素为峰值。

情况3:峰值处于中间某处。当遍历上升部分的时候,与情况2相同,没有元素满足nums[i]>nums[i+1]。我们不需要比较nums[i]与上一个元素nums[i-1]的关系。当达到峰值元素时候,nums[i]>nums[i+1]满足条件,不需要判断nums[i]与上一个元素nums[i-1]的关系。由于会遍历到nums[i],就已经证明了nums[i-1]<nums[i]。某则就判断为峰值了。

class Solution {public int findPeakElement(int[] nums) {for(int i=1;i<nums.length;i++){if(nums[i]<nums[i-1]){return i-1;}}return nums.length-1;}
}

3 递归二分查找

二分法用于有序数数中。我们可以将一个普通数组看做是升序降序交替的数组。结果只要返回其中一个峰值即可。利用这两点,我们可以使用二分。

如果当前处理的元素处于下降子序列,那么峰值一定在这个值的左边,也可能包含这个值。如果当前处理的元素处于上升子序列,那么峰值一定在这个值的右边。因为比较的是nums[i]和nums[i+1]的关系,所以在此情况下,峰值肯定不是当前元素。

class Solution {public int findPeakElement(int[] nums) {return findPeakElement(nums,0,nums.length-1);}private int findPeakElement(int[] nums,int l,int r){if(l==r) return l;int m = l +((r-l)>>1);if(nums[m]>nums[m+1]){return findPeakElement(nums,l,m);}else{return findPeakElement(nums,m+1,r);}}
}

leetcode 852和本题分析思路一样。

162. Find Peak Element相关推荐

  1. leetcode 162. Find Peak Element | 162. 寻找峰值(二分法找局部最大值)

    题目 https://leetcode.com/problems/find-peak-element/ 题解 2021-7-21 16:28:31 更新版思路: 根据左神在 课上 说的,可以使用二分法 ...

  2. LeetCode:Find Peak Element - 寻找一个数组内的顶点

    2019独角兽企业重金招聘Python工程师标准>>> 1.题目名称 Find Peak Element(寻找一个数组内的顶点) 2.题目地址 https://leetcode.co ...

  3. 75. Find Peak Element 【medium】

    75. Find Peak Element [medium] There is an integer array which has the following features: The numbe ...

  4. leetcode 【 Find Peak Element 】python 实现

    题目: A peak element is an element that is greater than its neighbors. Given an input array where num[ ...

  5. 【数组】Find Peak Element

    题目: A peak element is an element that is greater than its neighbors. Given an input array where num[ ...

  6. 【原创】leetCodeOj --- Find Peak Element 解题报告

    题目地址: https://oj.leetcode.com/problems/find-peak-element/ 题目内容: A peak element is an element that is ...

  7. 11 寻找峰值(Find Peak Element)

    文章目录 1 题目 2 描述 3 思路 3.1 图解 3.2 时间复杂度 3.3 空间复杂度 4 源码 1 题目   寻找峰值(Find Peak Element) lintcode:题号--75,难 ...

  8. 算法系列——寻找峰值 (Find Peak Element)

    题目描述 题目链接:https://leetcode-cn.com/problems/find-peak-element/ A peak element is an element that is g ...

  9. Leetcode_162_Find Peak Element

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43415313 A peak element is an e ...

最新文章

  1. 【云栖说第三期】发现大家对能模仿马云声音的ET有兴趣,我们找了阿里四位专家来聊聊ET背后的人工智能...
  2. addr 与 offset 区别
  3. spring mysql json_SpringBoot+MYSQL 配置支持json数据格式
  4. 顺利搭建了oracle
  5. 前端学习(2660):外部传入也行
  6. Intent.ACTION_PICK
  7. 基于Office 365 无代码工作流分析-需求基本分析!
  8. 在ubuntu上安装微博AIR
  9. vs2015 安装破解版Visual Assist X
  10. ha rose server安装 sql_Rose HA for SQL2008的安装之一
  11. DSP与FPGA的SRIO通信实现
  12. JAVA300集速学堂高淇个人笔记P1-P7如何学习JAVA300集计算机语言的发展历史多种编程语言的介绍JAVA三大版本的含义:
  13. C++ stringstream 从字符串中分离单词
  14. 分布式 Git - 为项目做贡献
  15. python爬虫请求头是什么意思_Pytho爬虫中Requests设置请求头Headers的方法
  16. 数据资产价值评估与定价:研究综述和展望
  17. 天语W700 adb驱动解决
  18. table合并单元格 colspan(跨列)和rowspan(跨行)
  19. Linux安装库时安装源错误,linux环境下golang安装第三方库的时候出错的决办法
  20. Windows 10开启ISS Web服务

热门文章

  1. java中不带package和带package的编译运行方式
  2. Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素...
  3. 解决MySQL忘记root密码
  4. WordPress的RSS订阅优化
  5. Mplayer 音频解码分析
  6. Java程序练习-螺旋矩阵
  7. linux 粘贴网站地址,linux 复制粘贴
  8. 该文件可能是只读的 或者您要访问的位置_喔噢小贴士:如何保护PPT不被更改,将其设为只读...
  9. Visual.Assist.X 菜单汉化
  10. 接口测试到底是什么?如何制造接口数据