当前位置:网站首页>2022.07.13_Daily Question
2022.07.13_Daily Question
2022-07-31 07:40:00 【No. い】
382. 链表随机节点
题目描述
给你一个单链表,随机选择链表的一个节点,并返回相应的节点值.每个节点 被选中的概率一样 .
实现 Solution
类:
Solution(ListNode head)
使用整数数组初始化对象.int getRandom()
从链表中随机选择一个节点并返回该节点的值.链表中所有节点被选中的概率相等.
示例:

输入
[“Solution”, “getRandom”, “getRandom”, “getRandom”, “getRandom”, “getRandom”]
[[[1, 2, 3]], [], [], [], [], []]
输出
[null, 1, 3, 2, 2, 3]
解释
Solution solution = new Solution([1, 2, 3]);
solution.getRandom(); // 返回 1
solution.getRandom(); // 返回 3
solution.getRandom(); // 返回 2
solution.getRandom(); // 返回 2
solution.getRandom(); // 返回 3
// getRandom() 方法应随机返回 1、2、3中的一个,每个元素被返回的概率相等.
提示:
- 链表中的节点数在范围
[1, 104]
内 -104 <= Node.val <= 104
- 至多调用
getRandom
方法104
次
进阶:
- 如果链表非常大且长度未知,该怎么处理?
- 你能否在不使用额外空间的情况下解决此问题?
- 水塘抽样
- 链表
- 数学
- 随机化
coding
class Solution1 {
ListNode head;
int size;
public Solution(ListNode head) {
this.head = head;
ListNode cur = head;
while (cur != null) {
cur = cur.next;
size ++;
}
}
public int getRandom() {
int randomNum = (int) (Math.random() * size);
int cnt = 0;
ListNode cur = head;
while (cur != null) {
if (cnt == randomNum) {
return cur.val;
}
cur = cur.next;
cnt ++;
}
return 0;
}
}
// ---------------------------------------------------------------
class Solution2 {
List<Integer> list;
public Solution(ListNode head) {
list = new ArrayList<>();
while (head != null) {
list.add(head.val);
head = head.next;
}
}
public int getRandom() {
return list.get((int) (Math.random() * list.size()));
}
}
边栏推荐
- 基于交替迭代法的交直流混合系统潮流计算matlab程序iEEE9节点系统算例
- leetcode 406. Queue Reconstruction by Height
- How to choose a suitable UI component library in uni-app
- 从 Google 离职,前Go 语言负责人跳槽小公司
- 项目 - 如何根据最近30天、最近14天、最近7天、最近24小时、自定义时间范围查询MySQL中的数据?
- postgresql源码学习(34)—— 事务日志⑩ - 全页写机制
- 多进程全局变量失效、变量共享问题
- LeetCode刷题——摆动序列#376#Medium
- codec2 BlockPool:unreadable libraries
- Obtaining server and client information
猜你喜欢
零样本学习&Domain-aware Visual Bias Eliminating for Generalized Zero-Shot Learning
英语翻译软件-批量自动免费翻译软件支持三方接口翻译
剑指offer(一)
2.(1)栈的链式存储、链栈的操作(图解、注释、代码)
Zero-Shot Learning & Domain-aware Visual Bias Eliminating for Generalized Zero-Shot Learning
芯塔电子斩获第十一届中国双创大赛芜湖赛区桂冠
iOS大厂面试查漏补缺
什么是半波整流器?半波整流器的使用方法
【微服务】 微服务学习笔记二:Eureka注册中心的介绍及搭建
2022.07.18_每日一题
随机推荐
SQL Server Datetime2数据类型
事务的四大特性
零样本学习&Domain-aware Visual Bias Eliminating for Generalized Zero-Shot Learning
Kubernetes调度
gstreamer的caps event和new_segment event
Difficulty comparison between high concurrency and multithreading (easy to confuse)
Conditional statements of shell (test, if, case)
tidyverse笔记——管道函数
LeetCode:952. 按公因数计算最大组件大小【欧拉筛 + 并查集】
任务及任务切换
LeetCode刷题——摆动序列#376#Medium
文件 - 07 删除文件: 根据fileIds批量删除文件及文件信息
【第四章】详解Feign的实现原理
Gradle剔除依赖演示
Third-party library-store
Leetcode952. 按公因数计算最大组件大小
【微服务】Nacos集群搭建以及加载文件配置
熟悉而陌生的新朋友——IAsyncDisposable
2022.07.18 _ a day
opencv、pil和from torchvision.transforms的Resize, Compose, ToTensor, Normalize等差别