162. Find Peak Element

weixin_33807284發表於2019-02-14

A peak element is an element that is greater than its neighbors.
Given an input array nums, where nums[i] ≠ nums[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 nums[-1] = nums[n] = -∞.

Example 1:

Input: nums = [1,2,3,1]
Output: 2
Explanation: 3 is a peak element and your function should return the index number 2.

Example 2:

Input: nums = [1,2,1,3,5,6,4]
Output: 1 or 5 
Explanation: Your function can return either index number 1 where the peak element is 2, or index number 5 where the peak element is 6.

Note:
Your solution should be in logarithmic complexity.

難度:medium

題目:峰值指當前元素大於其鄰居,給定一陣列相離元素不等,找出其峰值並返回其索引。陣列可能包含多個峰值,返回任一即可。注意:時間複雜度為對數

思路:二叉搜尋,nums[mid] > nums[mid + 1] 留下左邊,nums[mid] > nums[mid + 1]意味著nums[mid]可為潛在的峰值,如果左邊是升序則其為峰值,否則繼續查詢。如果mid已是最左邊的數,則為其為峰值。

Runtime: 2 ms, faster than 100.00% of Java online submissions for Find Peak Element.
Memory Usage: 37.6 MB, less than 100.00% of Java online submissions for Find Peak Element.

public class Solution {

public int findPeakElement(int[] nums) {
    int left = 0, right = nums.length - 1;
    while (left < right) {
        int mid = left + (right - left) / 2;
        if (nums[mid] > nums[mid + 1]) {
            right = mid;
        } else {
            left = mid + 1;
        }
    }
    return left;
}

}

相關文章