Leetcode 162. 寻找峰值

文章目录

  • 题目
  • 代码(首刷自解)
  • 代码(8.12 二刷看解析 二分)
  • 代码(9.23 三刷自解)

题目

Leetcode 162. 寻找峰值_第1张图片

Leetcode 162. 寻找峰值

代码(首刷自解)

class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int n = nums.size();
        nums.insert(nums.begin(), INT_MIN);
        nums.insert(nums.end(), INT_MIN);
        for(int i = 1; i <= n; i++) {
            if(nums[i] > nums[i-1] && nums[i] > nums[i+1])
                return i-1;
        }
        return 0;
    }
};

代码(8.12 二刷看解析 二分)

func findPeakElement(nums []int) int {
    left, right := 0, len(nums)-1
    for left < right {
        mid := (left+right)/2
        if nums[mid] < nums[mid+1] {
            left = mid + 1
        } else {
            right = mid
        }
    }
    return left
}
class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int left = 0, right = nums.size() - 1;
        while(left < right) {
            int mid = (right - left)/2 + left;
            if(nums[mid] < nums[mid + 1]) {    // 右边比中间值大,说明mid不是峰值
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        return left;
    }
};

代码(9.23 三刷自解)

题目说了返回任意一个峰值,那么就可以用二分返回其中的一个峰值。

class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int n = nums.size();
        int l = 0, r = n-1;
        while(l < r) {
            int mid = (l+r)/2;
            if(nums[mid] < nums[mid+1]) {
                l = mid + 1;
            } else {
                r = mid;
            }
        }
        return l;
    }
};

你可能感兴趣的:(Leetcode专栏,leetcode,算法,职场和发展)