• LeetCode //C - 162. Find Peak Element


    162. Find Peak Element

    A peak element is an element that is strictly greater than its neighbors.

    Given a 0-indexed integer array nums, find a peak element, and return its index. If the array contains multiple peaks, return the index to any of the peaks.

    You may imagine that nums[-1] = nums[n] = − ∞ -\infty . In other words, an element is always considered to be strictly greater than a neighbor that is outside the array.

    You must write an algorithm that runs in O(log n) time.
     

    Example 1:

    Input: nums = [1,2,3,1]
    Output: 2
    Explanation: 3 is a peak element and your function should return the index number 2.

    Example 2:

    Input: nums = [1,2,1,3,5,6,4]
    Output: 5
    Explanation: Your function can return either index number 1 where the peak element is 2, or index number 5 where the peak element is 6.

    Constraints:
    • 1 <= nums.length <= 1000
    • − 2 31 < = n u m s [ i ] < = 2 31 − 1 -2^{31} <= nums[i] <= 2^{31} - 1 231<=nums[i]<=2311
    • nums[i] != nums[i + 1] for all valid i.

    From: LeetCode
    Link: 162. Find Peak Element


    Solution:

    Ideas:
    1. Binary Search Approach: Instead of checking each element sequentially, we can use binary search. Given that an element is always considered to be strictly greater than its neighbor outside the array, there is always a peak element in the array.

    2. Midpoint Calculation: Start with the entire array as the search space. Calculate the midpoint of the current search space.

    3. Comparison: Compare the element at the midpoint with its neighbor:

    • If nums[mid] is less than nums[mid + 1], then there exists a peak to the right of mid because the elements on the right are increasing. Thus, we can narrow down our search space to the right half.
    • If nums[mid] is greater than or equal to nums[mid + 1], then the current element or an element to the left of mid could be a peak. Thus, we narrow down our search to the left half.
    1. Convergence: Continue the binary search process until we find a peak element. The process will always converge to a peak because of the properties of the array.

    2. Result: Return the index of the peak element.

    Code:
    int findPeakElement(int* nums, int numsSize) {
        int left = 0, right = numsSize - 1;
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] < nums[mid + 1]) {
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        return left;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    SpringBoot - 集成Quartz框架之Quartz简介
    MySQL:MySQL的集群——主从复制的原理和配置
    护眼灯频闪是什么意思?无频闪护眼灯哪个好
    【MySQL】表的基础增删改查
    让mybatis-plus支持NOT逻辑运算
    C#if...else...判断
    【Git】如何在Vscode中使用码云(Gitee)实现远程代码仓库与本地同步?(新手图文教程)
    (龙霸区块链)公链开发学习笔记
    黑盒测试技术
    为什么这么多人都想当产品经理?
  • 原文地址:https://blog.csdn.net/navicheung/article/details/133899604