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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章