162. Find Peak Element
文章目录
- 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相关推荐
- leetcode 162. Find Peak Element | 162. 寻找峰值(二分法找局部最大值)
题目 https://leetcode.com/problems/find-peak-element/ 题解 2021-7-21 16:28:31 更新版思路: 根据左神在 课上 说的,可以使用二分法 ...
- LeetCode:Find Peak Element - 寻找一个数组内的顶点
2019独角兽企业重金招聘Python工程师标准>>> 1.题目名称 Find Peak Element(寻找一个数组内的顶点) 2.题目地址 https://leetcode.co ...
- 75. Find Peak Element 【medium】
75. Find Peak Element [medium] There is an integer array which has the following features: The numbe ...
- leetcode 【 Find Peak Element 】python 实现
题目: A peak element is an element that is greater than its neighbors. Given an input array where num[ ...
- 【数组】Find Peak Element
题目: A peak element is an element that is greater than its neighbors. Given an input array where num[ ...
- 【原创】leetCodeOj --- Find Peak Element 解题报告
题目地址: https://oj.leetcode.com/problems/find-peak-element/ 题目内容: A peak element is an element that is ...
- 11 寻找峰值(Find Peak Element)
文章目录 1 题目 2 描述 3 思路 3.1 图解 3.2 时间复杂度 3.3 空间复杂度 4 源码 1 题目 寻找峰值(Find Peak Element) lintcode:题号--75,难 ...
- 算法系列——寻找峰值 (Find Peak Element)
题目描述 题目链接:https://leetcode-cn.com/problems/find-peak-element/ A peak element is an element that is g ...
- Leetcode_162_Find Peak Element
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43415313 A peak element is an e ...
最新文章
- 【云栖说第三期】发现大家对能模仿马云声音的ET有兴趣,我们找了阿里四位专家来聊聊ET背后的人工智能...
- addr 与 offset 区别
- spring mysql json_SpringBoot+MYSQL 配置支持json数据格式
- 顺利搭建了oracle
- 前端学习(2660):外部传入也行
- Intent.ACTION_PICK
- 基于Office 365 无代码工作流分析-需求基本分析!
- 在ubuntu上安装微博AIR
- vs2015 安装破解版Visual Assist X
- ha rose server安装 sql_Rose HA for SQL2008的安装之一
- DSP与FPGA的SRIO通信实现
- JAVA300集速学堂高淇个人笔记P1-P7如何学习JAVA300集计算机语言的发展历史多种编程语言的介绍JAVA三大版本的含义:
- C++ stringstream 从字符串中分离单词
- 分布式 Git - 为项目做贡献
- python爬虫请求头是什么意思_Pytho爬虫中Requests设置请求头Headers的方法
- 数据资产价值评估与定价:研究综述和展望
- 天语W700 adb驱动解决
- table合并单元格 colspan(跨列)和rowspan(跨行)
- Linux安装库时安装源错误,linux环境下golang安装第三方库的时候出错的决办法
- Windows 10开启ISS Web服务
热门文章
- java中不带package和带package的编译运行方式
- Java基础知识强化之集合框架笔记27:ArrayList集合练习之去除ArrayList集合中的重复字符串元素...
- 解决MySQL忘记root密码
- WordPress的RSS订阅优化
- Mplayer 音频解码分析
- Java程序练习-螺旋矩阵
- linux 粘贴网站地址,linux 复制粘贴
- 该文件可能是只读的 或者您要访问的位置_喔噢小贴士:如何保护PPT不被更改,将其设为只读...
- Visual.Assist.X 菜单汉化
- 接口测试到底是什么?如何制造接口数据