Python|randint|散列表|栈|树|位运算|单选记录:随机生成一个具有 20 个元素的元素值在 1-10 之间的列表|二叉搜索树迭代器|两数相除
创始人
2025-05-29 06:30:52

目录

1、随机生成一个具有 20 个元素的元素值在 1-10 之间的列表(散列表)

选项代码

2、二叉搜索树迭代器(栈,树)

示例

选项代码

3、两数相除(位运算,数学)

 示例

选项代码


1、随机生成一个具有 20 个元素的元素值在 1-10 之间的列表(散列表)

贡献者: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}次')

2、二叉搜索树迭代器(栈,树)

实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:

  • BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。
  • boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。
  • int next()将指针向右移动,然后返回指针处的数字。

注意,指针初始化为一个不存在于 BST 中的数字,所以对 next() 的首次调用将返回 BST 中的最小元素。

你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 的中序遍历中至少存在一个下一个数字。

 

示例:

https://img-service.csdnimg.cn/img_convert/743f55b78d358ff4ba5fbb7d8088a0d9.png

输入
["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, 105] 内
  • 0 <= Node.val <= 106
  • 最多调用 105 次 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()

3、两数相除(位运算,数学)

给定两个整数,被除数 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

 

提示:

  • 被除数和除数均为 32 位有符号整数。
  • 除数不为 0。
  • 假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。

选项代码:

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))

相关内容

热门资讯

百米炮仗花长廊盛放,橙红瀑布倾... 刷爆朋友圈、霸屏短视频,最近南宁人的春日快乐,被一条百米炮仗花长廊狠狠承包了。2月12日,暖阳洒向邕...
多所高校推出一分钱年夜饭,年味... 春节即将来临,年味愈加浓厚。对于选择留在校园过年的同学们来说,年夜饭成了一个热门话题。那么,留校过年...
【客家】不蒸甜粄不过年!客家人... 客家人有“不蒸甜粄不过年”的说法,在琳琅满目的年货里,甜粄是绝对的主角,更是亲戚拜年赠礼的首选。每逢...
马年开运指南!麦玲玲现身广州花... “玲玲姐有什么能帮大家马年行大运的技巧,可以教给街坊们?” “你还记得若曦吗?”…… 2月12日,春...