原题陈述:
题型概括
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