leecode 刷题心得,位运算的一些应用

由于数据结构和算法的一些特点,我们在编程时候经常需要除以2。比如计算一些有关二叉树或者二分查找的index的问题。众所周知,计算机计算除法是很没有效率的,这时候我们就可以用位运算来代替除法以提高效率。比如,leecode108 把有序数组转为二叉搜索树。官方答案 以及运行效率如下:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
        def helper(left, right):
            if left > right:
                return None

            # 总是选择中间位置左边的数字作为根节点
            mid = (left + right) // 2

            root = TreeNode(nums[mid])
            root.left = helper(left, mid - 1)
            root.right = helper(mid + 1, right)
            return root

        return helper(0, len(nums) - 1)

在这里插入图片描述
我们可以看到,官方答案是除法运算,然后,把除法替换成位运算如何呢?我们继续看一下。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
            if len(nums)==0:return None
            # [1,2,3,4,5,6,7,8,9]
            def helper(left,right):
                middle = (left+right)>>1
                if left > right:
                    return None
                root = TreeNode(nums[middle])
                root.left = helper(left,middle-1)
                root.right = helper(middle+1,right)
                return root
            return helper(0,len(nums)-1)
``

在这里插入图片描述
我们发现,运行效率大大提升了。
顺便说一句, 与 位运算and 1(确定奇偶性 合用 效果更佳)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值