1. 程式人生 > >leetcode 162. 尋找峰值(Find Peak Element)

leetcode 162. 尋找峰值(Find Peak Element)

峰值元素是指其值大於左右相鄰值的元素。

給定一個輸入陣列 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素並返回其索引。

陣列可能包含多個峰值,在這種情況下,返回任何一個峰值所在位置即可。

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

示例 1:

輸入: nums = [1,2,3,1]

輸出: 2
解釋: 3 是峰值元素,你的函式應該返回其索引 2。

示例 2:

輸入: nums = [1,2,1,3,5,6,4]
輸出: 1 或 5 
解釋: 你的函式可以返回索引 1,其峰值元素為 2;
     或者返回索引 5, 其峰值元素為 6。

說明:

你的解法應該是 O(logN)時間複雜度的。

找一個就行了,按題目的意思來說

class Solution {
    public int findPeakElement(int[] nums) {
        int l = 0,r = nums.length-1;
        while(l<r) {
        	int mid = l + (r-l)/2;
        	if(nums[mid]>nums[mid+1])
        		r = mid;
        	else
        		l = mid+1;
        }
        return l;
    }
}
class Solution {
    public int findPeakElement(int[] nums) {
        int start = 0;
        int end = nums.length - 1;
        int mid = 0;
        while (start < end) {
            mid = start + (end - start) / 2;
            if (nums[mid] <= nums[mid + 1]) {
                start = mid + 1;
            } else {
                end = mid;
            }
        }
        return start;
    }
}