二分法(移位运算>>)(python)

这篇博客介绍了如何运用二分查找法在已排序的列表中找到目标值的插入位置。通过设置左右指针,不断折中查找,确定目标值应插入的位置。代码示例展示了具体实现过程,适用于严格升序且无重复元素的列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习leetcode-搜索插入位置
使用二分法查找目标值并插入对应有序列表。该经典算法印象中由牛顿最先使用,流程为:
从列表首尾开始建立左右指针,每次索引折中,对比折中的值和目标值。如果小于目标值,那么目标值一定在折中值右边,因此左指针赋值为折中值+1,否则目标值一定在折中值左边,因此右指针赋值为折中值-1。
其中折中有两种方式计算,一种就是简单的除以二后取整。对于严格升序列表(不存在重复元素)向上向下取整都可以。
另一种折中方式为移位。这里需要除以2,因此使用右移位。通过移位来实现除法显然是基于二进制。例如9/2。9=1001,右移一位后最末尾的1被去掉变成100=4。因此至少对于正整数的移位运算是向下取整(这对于二分已经足够了)

代码如下

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        n = len(nums)
        left = 0
        right = n-1
        while left <= right:
            mid = int(((right - left) / 2) + left)
            if nums[mid] < target:
                left = mid + 1
            else:
                right = mid - 1
        return left
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值