LeetCode162: 给定一个数组,找出数组的峰值。返回其下标

题目:

峰值元素是指其值大于左右相邻值的元素。

给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引。

数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。

你可以假设 nums[-1] = nums[n] = -∞。

说明:

你的解法应该是 O(logN) 时间复杂度的。

思路:

二分法

 /**
 * 二分查找
 * @param nums
 * @return
 */
public   int findPeakElement(int[] nums) {
    if(nums.length==0){
        return -1;
    }
    int low = 0;
    int high = nums.length - 1;

    while (low < high) {
        int mid1 = (low + high) / 2;
        if (nums[mid1] < nums[mid1+1]) {
            low = mid1 + 1;
        } else {
            high = mid1;
        }
    }
    return low;
}

你可能感兴趣的:(LeetCode)