寻找峰值
拟人算法系列文章,以容易理解的方式描述算法,点赞收藏不迷路
class Solution:
def findPeakElement(self, nums: list[int]) -> int:
lo, hi = 0, len(nums) - 1
while lo < hi:
mid = (lo + hi) // 2
if nums[mid] > nums[mid + 1]:
hi = mid
else:
lo = mid + 1
return lo
if __name__ == "__main__":
nums = [1, 2, 3, 1]
s = Solution()
print(s.findPeakElement(nums)) # 2
思路同二分查找,只是判断条件为
- 如果中间比中间的下一个数大,那说明峰值在左边,mid 还有可能,所以 hi=mid
- 否则在右边,mid 不再可能,所以 lo=mid+1
最后 lo 就是一个峰值的位置