import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param heights int整型一维数组
* @return int整型
*/
public int findPeakElement (int[] heights) {
// write code here
int l = 0;
int r = heights.length - 1;
while (l < r) {
int mid = l + (r - l) / 2;
if (heights[mid] > heights[mid + 1]) {
r = mid;
} else {
l = mid + 1;
}
}
return l;
}
}
编程语言是Java。
该题考察的知识点是二分查找算法。在给定的整数数组heights中,我们要找到一个峰值元素,即满足heights[i] > heights[i+1]的元素heights[i]。
代码的文字解释如下:
- 初始化变量
l为0,表示数组的起始位置,初始化变量r为数组heights的最后一个位置。 - 使用二分查找法,在数组范围
l到r内搜索峰值元素。 - 在每次迭代中,计算中间元素索引
mid,通过比较heights[mid]与heights[mid+1]的值来判断峰值在左侧还是右侧。 - 若
heights[mid] > heights[mid+1],说明峰值在当前位置mid或者其左侧,因此将r更新为mid,继续向左查找。 - 说明峰值在当前位置
mid的右侧,将l更新为mid+1,继续向右查找。 - 当
l与r相等时,找到了峰值元素,返回l即可。

京公网安备 11010502036488号