leetcode学习笔记

二分法学习

经典例题:

搜索旋转排序数组

一般二分查找需要两个指针,一个指向左边界,一个指向右边界,在左边界<右边界得情况下,查找,判断目标答案应该在左边界和中点之间 还是在中点和右边界之间

left = 0
right = n-1(n 考虑题意答案是否能取到n)
nums = [1,2,3,4,5]
while left < right:
    mid = (left+right)//2
    if nums[left] < nums[mid]:
        do someting
    else:
        do someting

二分查找主要得难点在于边界值的查找

在边界值确定时,需要依赖题意,当答案不可能存在于mid及其之前的位置时,left = mid -1,同理,答案不可能存在于mid及其之后的位置时,right = mid+1, 当答案可能存在于mid位置时,right则可以处理为right=mid

因为循环条件为left < right, 因此出循环时,必定left==right, 返回结果可以不用考虑用left还是用right。只是需要注意死循环的可能

你可能感兴趣的:(leetcode,学习,算法)