📜  门|门 IT 2005 |第 91 题(1)

📅  最后修改于: 2023-12-03 15:12:46.340000             🧑  作者: Mango

门|门 IT 2005 |第 91 题 - 程序员必做题

本题是针对程序员的一道必做题目,题目代码如下:

class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        left, right = 0, len(nums) - 1
        while left < right:
            mid = (left + right) // 2
            if nums[mid] > nums[mid + 1]:
                right = mid
            else:
                left = mid + 1
        return left

这段代码实现的功能是寻找给定数组中的峰值,并返回峰值的下标。

其中,数组nums的长度n满足1 <= n <= $10^4$,nums中的整数大小在$-2^{31}$和$2^{31}-1$之间。

对于本题,我们可以采用二分查找的方法来寻找峰值,具体实现如下:

  1. 初始化左右边界为0和n-1。
  2. 判断左右边界的中间位置mid的值与mid+1位置的值的大小关系。
  3. 如果nums[mid] > nums[mid+1],说明mid位置可能是峰值所在的位置,因此将右边界更新为mid,继续对左半区间进行二分查找。
  4. 否则,说明mid+1位置可能是峰值所在的位置,因此将左边界更新为mid+1,继续对右半区间进行二分查找。
  5. 在左右边界重叠的位置,即找到了峰值,返回该位置即可。

在本题中,我们需要注意边界情况的判断,例如左右边界是否合法、mid+1位置是否越界等。

我们可以通过一些特殊的样例进行测试,以保证代码的正确性。

该题可以帮助程序员提高对于二分查找算法的理解和掌握,并能够训练出对各种边界情况的判断能力。

题目来源:LeetCode 162.寻找峰值