开始记录一下自己刷题的过程,零基础小白从头开始
今天主要学了一下二分查找法,根据左闭右闭和左闭右开会有些微不同的写法。
易错点:
1.区间在设置下标的时候根据开闭情况,应该写num.size?还是num.size-1?
2.开闭区间边界处在循环的时候,应该写mid?mid-1?
[left, right] 的写法:
left=0
right=len(nums)-1
while left<=right:
mid = (left+right)/2
if num[mid]>target:
right = mid-1
elif num[mid]<target:
left = mid+1
else:
return mid
return -1
[left, right) 的写法:
left=0
#右边界有区别
right=len(nums)
while left<=right:
mid = (left+right)/2
if num[mid]>target:
# 右边是开区间,所以可以是mid
right = mid
elif num[mid]<target:
# 左边界不变
left = mid+1
else:
return mid
return -1
704二分查找题目解答:
class Solution(object):
def search(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
l = 0
r = len(nums)-1
while l<=r:
middle=(l+r)/2
if target<nums[middle]:
r=middle-1
elif target>nums[middle]:
l=middle+1
else:
return middle
return -1