马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
形貌
给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组大概包罗多个峰值,在这种情况下,返回任何一个所在位置即可。
1
.峰值元素是指其值严酷大于左右相邻值的元素。严酷大于即不能有等于
2
.假设 nums[-1
] =
; nums[n] =
; −∞
3.对于全部有效的 i 都有 nums !=
; nums[i + 1
]
4.你可以利用O(logN)的时间复杂度实现此问题吗࿱
f;
数据范围࿱
a;
1
≤nums.length≤2
×1
0^5
−2
^31
<=
;nums<=
;2
^31
−1
如输入[2
,4,1
,2
,7,8,4]时,会形成两个山峰,一个是索引为1
,峰值为4的山峰,另一个是索引为5,峰值为8的山峰,如下图所示࿱
a;
[img=533,566]https://img-blog.csdnimg.cn/img_convert/81
f840c6a531
30447a60c2
30578f1
2
70.png[/img]
示例1
输入࿱
a;
返回值࿱
a;
说明࿱
a;
- 4和8都是峰值元素,返回4的索引1
- 或者8的索引5都可以
复制代码 示例2
输入࿱
a;
返回值࿱
a;
说明࿱
a;
思绪分析࿱
a;
该题只要找出一个峰值即可,可以利用二分法,判定mid附近的元素来寻找峰值,如果mid右边的元素大于mid的数值,那么峰值大概出现在右半部分,只要将left=
;mid+1
,再判定它右边的元素是否小于它,即可找到峰值࿱
b;反之mid右边的元素小于mid的数值,那么峰值大概出现在左半部分,只要将right=
;,再判定它左边的元素。
代码࿱
a;
- import java.util.*;public class Solution { /** * * @param nums int整型一维数组 * @return int整型 */ public int findPeakElement (int[] nums) { int left=
- ;0,right=
- ;nums.length-1
- ; while(left<right){ int mid=
- ;(left+right)/2
- ; //如果mid的下一个元素比它大,则峰值应该产生在mid+1
- 这边 if(nums[mid]<nums[mid+1
- ]){ left=
- ;mid+1
- ; }else{ right=
- ;mid; } } return left; }}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao1
2
3.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |