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]

代码的文字解释如下:

  1. 初始化变量l为0,表示数组的起始位置,初始化变量r为数组heights的最后一个位置。
  2. 使用二分查找法,在数组范围lr内搜索峰值元素。
  3. 在每次迭代中,计算中间元素索引mid,通过比较heights[mid]heights[mid+1]的值来判断峰值在左侧还是右侧。
  4. heights[mid] > heights[mid+1],说明峰值在当前位置mid或者其左侧,因此将r更新为mid,继续向左查找。
  5. 说明峰值在当前位置mid的右侧,将l更新为mid+1,继续向右查找。
  6. lr相等时,找到了峰值元素,返回l即可。