1. 程式人生 > >LeetCode刷題Medium篇Find Peak Element

LeetCode刷題Medium篇Find Peak Element

題目

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.

十分鐘嘗試

因為時間複雜度要求O(log)級別,所以肯定要用二分法,遞迴或者折半查詢。

很顯然這個題目也是個查詢操作,所以利用折半查詢試試,來,上程式碼:

class Solution {
    public int findPeakElement(int[] nums) {
        int  low=0; 
        int high=nums.length-1;
        while(low<high){
            int mid=(low+high)/2;
            if(nums[mid]>nums[mid+1]&&nums[mid]]>nums[mid-1]){
                return nums[mid];
            }
            else{
                low
            }
        }
    }
}

寫到這裡不知道怎麼寫,if裡面的條件不對,肯定應該只有一個。但是這樣能保證找到的元素大於兩邊的元素嗎?看下面的知識點,如何尋找任意一個峰值。折半查詢要求輸入陣列有序,但是這個例子的確可以,不要求有序,因為這種趨勢決定的。

https://courses.csail.mit.edu/6.006/spring11/lectures/lec02.pdf