红黑树刷题(下)

99. 恢复二叉搜索树

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def inorder(self, root):
        if not root: return
        self.inorder(root.left)
        if self.pre and self.pre.val >  root.val:
            if not self.p:
                self.p = self.pre 
            self.q = root
        self.pre = root
        self.inorder(root.right)
    def recoverTree(self, root: Optional[TreeNode]) -> None:
        """
        Do not return anything, modify root in-place instead.
        """
        self.pre = None
        self.p = self.q = None
        self.inorder(root)
        self.p.val, self.q.val = self.q.val, self.p.val
        return root

653. 两数之和 IV - 输入二叉搜索树

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def inorder(self, root, k, ret):
        if not root: return False 
        if self.inorder(root.left, k, ret):
            return True 
        if k - root.val in ret:
            return True 
        ret.add(root.val)
    
        if self.inorder(root.right, k, ret):
            return True
        return False
        
    def findTarget(self, root: Optional[TreeNode], k: int) -> bool:
        ret = set()
        return self.inorder(root, k, ret)

204. 计数质数

class Solution:
    def countPrimes(self, n: int) -> int:
        if n < 2: return 0
        ret = [0] * (n + 1)
        ret[0] = 1 
        ret[1] = 1
        for i in range(n + 1):
            if ret[i] == 1: continue 
            ret[i * i:n:i] = [1] * len(ret[i * i:n:i])
        return sum(1 for i in range(n) if ret[i] == 0)

504. 七进制数

class Solution:
    def convertToBase7(self, num: int) -> str:
        if num == 0: return '0'
        ans = ''
        flag = 0
        if num < 0:
            flag = 1
            num = -num
        while num:
            ans = str(num % 7) + ans
            num //= 7
        return ('-' if flag else '') + ans

461. 汉明距离


528. 按权重随机选择

class Solution:

    def __init__(self, w: List[int]):
        self.pre_sum = w[:]
        for i in range(1, len(w)):
            self.pre_sum[i] += self.pre_sum[i -1]
        self.n = self.pre_sum[-1]

    def pickIndex(self) -> int:
        x = random.randint(1, self.n)
        l, r = 0, len(self.pre_sum) - 1
        while l < r:
            mid = (l + r) // 2
            if self.pre_sum[mid] <= x - 1:
                l = mid + 1
            else: r = mid 
        return l                


# Your Solution object will be instantiated and called as such:
# obj = Solution(w)
# param_1 = obj.pickIndex()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值