领扣LintCode算法问题答案-75. 寻找峰值
目录
75. 寻找峰值描述样例 1:样例 2:
题解鸣谢
75. 寻找峰值
描述
你给出一个整数数组(size为n),其具有以下特点:
相邻位置的数字是不同的A[0] < A[1] 并且 A[n - 2] > A[n - 1]
假定P是峰值的位置则满足A[P] > A[P-1]且A[P] > A[P+1],返回数组中任意一个峰值的位置。
数组保证至少存在一个峰如果数组存在多个峰,返回其中任意一个就行数组至少包含 3 个数
样例 1:
输入: [1, 2, 1, 3, 4, 5, 7, 6]
输出: 1 or 6
解释:
返回峰顶元素的下标
样例 2:
输入: [1,2,3,4,1]
输出: 3
题解
public class Solution {
public int findPeak(int[] A
) {
if (A
.length
== 3) {
return 1;
}
int left
= 1;
int right
= A
.length
- 2;
while (left
<= right
) {
int mid
= (left
+ right
) >>> 1;
long midVal
= A
[mid
];
if (midVal
> A
[mid
- 1]
&& midVal
> A
[mid
+ 1])
return mid
;
else if (A
[mid
- 1] > A
[mid
+ 1])
right
= mid
- 1;
else
left
= mid
+ 1;
}
return 1;
}
}
原题链接点这里
鸣谢
非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。 欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。