162. Find Peak Element

A peak element is an element that is greater than its neighbors.
Given an input array where num[i] ≠ num[i+1], find a peak element and return its index.
The array may contain multiple peaks, in that case return the index to any one of the peaks is fine.
You may imagine that num[-1] = num[n] = -∞.

For example, in array [1, 2, 3, 1], 3 is a peak element and your function should return the index number 2.

查找峰值元素
用正常遍历 还有单调栈两种做法做出来了 但时间复杂度是O(n) 答案是O(lgn)的 二分查找竟然还可以这么用 

    public int findPeakElement(int[] nums) {
        return search(nums, 0, nums.length - 1);
    }
    public int search(int[] nums, int l, int r) {
        if (l == r)
            return l;
        int mid = (l + r) / 2;
        if (nums[mid] > nums[mid + 1])//1.
            return search(nums, l, mid);
        return search(nums, mid + 1, r);
    }
}

1.nums[mid] > nums[mid+1] 峰值在左边 继续向左找 

否则向右找

画个图就非常好理解了



猜你喜欢

转载自blog.csdn.net/daimingyang123/article/details/79338826
今日推荐