目录
1、随机生成一个具有 20 个元素的元素值在 1-10 之间的列表(散列表)
选项代码
2、二叉搜索树迭代器(栈,树)
示例
选项代码
3、两数相除(位运算,数学)
示例
选项代码
贡献者:asd807832658
随机生成一个具有 20 个元素的元素值在 1-10 之间的列表,输出连续最长数的个数。
import random
a = [random.randint(1,10) for i in range(20)]
print(a)
l = rl = 1
n = rn = a[0]
for v in a[1:]:if v==n:l += 1if l>rl:rl = lrn = velse:l = 1n = v
print(f'连续最长的数是{rn},连续了{rl}次')
实现一个二叉搜索树迭代器类BSTIterator
,表示一个按中序遍历二叉搜索树(BST)的迭代器:
BSTIterator(TreeNode root)
初始化 BSTIterator
类的一个对象。BST 的根节点 root
会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。boolean hasNext()
如果向指针右侧遍历存在数字,则返回 true
;否则返回 false
。int next()
将指针向右移动,然后返回指针处的数字。注意,指针初始化为一个不存在于 BST 中的数字,所以对 next()
的首次调用将返回 BST 中的最小元素。
你可以假设 next()
调用总是有效的,也就是说,当调用 next()
时,BST 的中序遍历中至少存在一个下一个数字。
输入
["BSTIterator", "next", "next", "hasNext", "next", "hasNext", "next", "hasNext", "next", "hasNext"]
[[[7, 3, 15, null, null, 9, 20]], [], [], [], [], [], [], [], [], []]
输出
[null, 3, 7, true, 9, true, 15, true, 20, false]
解释
BSTIterator bSTIterator = new BSTIterator([7, 3, 15, null, null, 9, 20]);
bSTIterator.next(); // 返回 3
bSTIterator.next(); // 返回 7
bSTIterator.hasNext(); // 返回 True
bSTIterator.next(); // 返回 9
bSTIterator.hasNext(); // 返回 True
bSTIterator.next(); // 返回 15
bSTIterator.hasNext(); // 返回 True
bSTIterator.next(); // 返回 20
bSTIterator.hasNext(); // 返回 False
提示:
[1, 10
5
]
内0 <= Node.val <= 10
6
10
5
次 hasNext
和 next
操作
进阶:
next()
和 hasNext()
操作均摊时间复杂度为 O(1)
,并使用 O(h)
内存。其中 h
是树的高度。class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = None
class BSTIterator:def __init__(self, root: TreeNode):self.index = -1self.node_list = []self._iterator(root)def _iterator(self, root):if not root:returnself._iterator(root.left)self.node_list.append(root.val)self._iterator(root.right)def next(self) -> int:"""@return the next smallest number"""self.index += 1return self.node_list[self.index]def hasNext(self) -> bool:"""@return whether we have a next smallest number"""return self.index + 1 < len(self.node_list)
# Your BSTIterator object will be instantiated and called as such:
# obj = BSTIterator(root)
# param_1 = obj.next()
# param_2 = obj.hasNext()
给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。
整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2
示例 1:
输入: dividend = 10, divisor = 3
输出: 3
解释: 10/3 = truncate(3.33333..) = truncate(3) = 3
示例 2:
输入: dividend = 7, divisor = -3
输出: -2
解释: 7/-3 = truncate(-2.33333..) = -2
提示:
import math
class Solution(object):def divide(self, dividend, divisor):if divisor == 0:return MAX_INTif dividend == 0:return 0isPositive = (dividend < 0) == (divisor < 0)m = abs(dividend)n = abs(divisor)res = math.log(m) - math.log(n)res = int(math.exp(res))if isPositive:return min(res, 2147483647)return max(0 - res, -2147483648)
if __name__ == '__main__':s = Solution()print(s.divide(dividend = 7, divisor = -3))