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

相关内容

热门资讯

新手友好“小白道”撬动市场,耀... 新手雪道。近日,上海耀雪冰雪世界专为滑雪初学者打造的“小白道”全新亮相,迅速点燃市场热情,元旦假期预...
从早餐到加餐,轻松用苹果点亮日... 苹果的酸甜口感,仿佛天生适配各类烹饪场景。它既能中和油腻,又能为菜品注入清新果香,无论是作为主角撑起...
一口小面包,超好吃~ 烤这款小面包的时候,屋里的香味简直诱人极了。 这是一款含有丰富蛋奶和黄油的小面包,非常非常香。它特别...
五粮液属于什么香型白酒 探秘五粮液:到底属于什么香型白酒? 各位酒友们,白酒的香型就像是不同风格的音乐,各有各的韵味。今天...
旅途风景怎么拍好看?掌握这些技... 旅途中所遇之风景,并非仅是供视觉去享受的,更是一个用以感知世界、理解自我这样一种过程。其风景能够是那...