LeetCode162.尋找峯值

問題:尋找峯值:峯值元素是指其值大於左右相鄰值的元素。
給定一個輸入數組 nums,其中 nums[i] ≠ nums[i+1],找到峯值元素並返回其索引。
數組可能包含多個峯值,在這種情況下,返回任何一個峯值所在位置即可。
你可以假設 nums[-1] = nums[n] = -∞。

這個題中重點的一個條件:nums[-1] = nums[n] = -∞;也就是說這個峯值,他可能在數組頭或尾

分析:採用二分法找大的那一半;因爲在大的那一邊緣元素肯定大於他旁邊的,如果已知nums[mid]>nums[mid+1],那麼mid-1不是大於mid就是小於,當小於時便成功,大於時到首位,nums[0] = -∞,成功;先已知 nums[mid+1]>nums[mid],那麼mid+2只有兩種可能,一個是大於mid+1,一個是小於mid+1,小於mid+1的情況,那麼mid+1就是峯值,大於mid+1的情況,繼續向右推,如果一直到數組的末尾都是大於的,那麼可以肯定最後一個元素是峯值,因爲nums[nums.length]=負無窮

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

     return left;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章