Leetcode -- 162. 寻找峰值
Problem: 162. 寻找峰值
思路
根据题目条件,一个数的左边比它大,那么它的左边一定存在一个峰值,右边同理
解题方法
利用二分法查找峰值,注意特殊边界的特判。
复杂度
时间复杂度:
添加时间复杂度, 示例: $Olog(n)$
空间复杂度:
添加空间复杂度, 示例: $Olog(n)$
Code
class Solution {
    public int findPeakElement(int[] nums) {
        int len = nums.length;
        if (len == 1 || nums[0] > nums[1]) {
            return 0;
        }
        if (nums[len - 1] > nums[len - 2]) {
            return len - 1;
        }
        int left = 0;
        int right = len - 1;
        int mid;
        while (left <= right) {
            mid = left + ((right - left) >> 1);
            if (mid == 0) {
                return nums[0] > nums[1] ? 0 : 1;
            } else if (mid == len - 1) {
                return nums[mid] > nums[mid - 1] ? mid : mid-1;
            }
            if (nums[mid] > nums[mid - 1] && nums[mid] > nums[mid + 1]) {
                return mid;
            }
            if (nums[mid - 1] > nums[mid]) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return -1;
    }
}

                
            
        
浙公网安备 33010602011771号