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
即可。