leetcode题解-162. Find Peak Element

来源:互联网 发布:淘宝店家信誉等级 编辑:程序博客网 时间:2024/06/05 15:05

题目:

A peak element is an element that is greater than its neighbors.Given an input array where num[i] ≠ num[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 num[-1] = num[n] = -∞.For example, in array [1, 2, 3, 1], 3 is a peak element and your function should return the index number 2.click to show spoilers.Note:Your solution should be in logarithmic complexity.

这道题目比较简单,目的是寻找数组中任意一个极大值点。有两种思路,一种是遍历数组,判断每个元素是否满足条件,这里需要注意的是,我们不需要判断是否大于右边并且大于左边,我们只需要判断大于右边即可,因为在这种便利条件下,到了这个元素就说明他一定大于左边的元素。可以省去一次判断,代码入下:

    public int findPeakElement(int[] nums) {        if(nums.length <=1 || nums[0] > nums[1])            return 0;        for(int i=1; i<nums.length-1; i++){            if(nums[i] > nums[i+1])                return i;        }        return nums.length-1;    }

还有一种方案就是,使用binary-search,代码如下:

    public int findPeakElement1(int[] nums) {        int n = nums.length;        int lo = 0, hi = n - 1;        while(lo < hi) {            int mid = lo + (hi - lo) / 2;            if(nums[mid] < nums[mid+1]) {                lo = mid + 1;            } else {                hi = mid;            }        }        return lo;    }
原创粉丝点击