美文网首页
【二分查找】704 二分查找

【二分查找】704 二分查找

作者: 何几时 | 来源:发表于2021-07-04 21:24 被阅读0次

    纠结的点

    1. 二分左右边界下标得到的游标是否能被整除
      解决办法:与其分开被整除和不能被整除,不如就暂定游标cursor为向下取整。

    正确解法(参考官方题解)

    时间复杂度:O(logN)

    class Solution:
        def search(self, nums: List[int], target: int) -> int:
            if len(nums) == 0:
                return -1
    
            left = 0  # 数组下标左边界
            right = len(nums) - 1  # 数组下标右边界
            ret = -1
    
            while left <= right:
                # cursor 都是向下取整,避开分别判断是否要整除的问题
                cursor = left + (right - left) // 2
                if nums[cursor] == target:
                    ret = cursor
                    break
                if nums[cursor] < target:
                    left = cursor + 1
                else:
                    right = cursor - 1        
            return ret  
    

    进阶题目:35. 搜索插入位置

    class Solution:
        def searchInsert(self, nums: List[int], target: int) -> int:
            if len(nums) == 0:
                return 0
            
            # 初始化边界
            left = 0
            right = len(nums) - 1
            ret = -1
    
            while left <= right:
                cursor = left + (right - left) // 2
                if nums[cursor] == target:
                    ret = cursor
                    break
                elif nums[cursor] < target:
                    left = cursor + 1
                else:
                    right = cursor - 1
            
            # 判断是否数组中没有该元素
            if ret == -1 and right < left:
                ret = min(left, right) + 1
    
            return ret
    

    相关文章

      网友评论

          本文标题:【二分查找】704 二分查找

          本文链接:https://www.haomeiwen.com/subject/mnevultx.html