0
点赞
收藏
分享

微信扫一扫

一类二分查找问题的学习与反思

骑在牛背上看书 2022-04-14 阅读 68

文章目录

原题陈述:

  1. leetcode-cn 第852题 - 山脉数组的峰顶索引
  2. leetcode-cn 第69题 - x的平方根

题型概括

1. 是一个有序序列

在852题中,对山脉数组的定义是一个先递增后递减的序列
在69题中,可以把待遍历 x 的取值认为是一个自然数递增序列

2. target值均不明确显示在题中,且不作为参数传入

在852题中,target 值是序列中的第一个最大数字
在69题中,target 值是 [ 0 : x ] 序列中最后一个小于等于 x \sqrt{x} x 的整数

题解分析

852题题解:找最大
class Solution:
    def peakIndexInMountainArray(self, arr: List[int]) -> int:
        res = 0
        lenth = len(arr)
        start = 0
        end = lenth
        while start <= end :
            mid = (end - start) // 2 + start
            if arr[mid] > arr[mid+1]:
                end = mid - 1
                res = mid
            else:
                start = mid + 1 
        return res
69题题解:找最小
class Solution:
    def mySqrt(self, x: int) -> int:
        if 0 < x <= 3: return 1
        elif x == 0:return 0
        left = 0
        right = x 
        while left <= right:
            mid = (right - left) // 2 + left
            if mid*mid <= x:
                left = mid + 1 
                ans = mid
            else:
                right = mid - 1 
        return ans

对比两题答案,可知,二分查找的骨架不变,均为:

left = 0
right = x 
while left <= right:
    mid = (right - left) // 2 + left
    if Condition:
    	...
    	res = mid
    else:
    	...
return res
举报

相关推荐

0 条评论