LeetCode 382. 链表随机节点(概率)
1. 题目
给定一个单链表,随机选择链表的一个节点,并返回相应的节点值。保证每个节点被选的概率一样。
进阶:
如果链表十分大且长度未知,如何解决这个问题?你能否使用常数级空间复杂度实现?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/linked-list-random-node
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- O(n) 空间复杂度
class Solution {vector<int> v;
public:/** @param head The linked list's head.Note that the head is guaranteed to be not null, so it contains at least one node. */Solution(ListNode* head) {while(head){v.push_back(head->val);head = head->next;}}/** Returns a random node's value. */int getRandom() {return v[rand()%v.size()];}
};
- O(1) 空间复杂度
class Solution {ListNode *H;
public:/** @param head The linked list's head.Note that the head is guaranteed to be not null, so it contains at least one node. */Solution(ListNode* head) { H = head; }/** Returns a random node's value. */int getRandom() {int count = 0, i;ListNode *select, *h = H;while(h){if(count++ == 0)select = h;else{i = rand()%count;if(i < 1)//0, 概率1/count,每次加入一个节点后,之前选的节点有概率被替换select = h;}h = h->next;}return select->val;}
};
LeetCode 382. 链表随机节点(概率)相关推荐
- Leetcode 382. 链表随机节点 解题思路及C++实现
解题思路: 因为题目中要求需要常数级的空间复杂度,所以就需要计算链表长度了. /*** Definition for singly-linked list.* struct ListNode {* i ...
- leetcode 382. Linked List Random Node | 382. 链表随机节点(Java)
题目 https://leetcode.com/problems/linked-list-random-node/ 题解 先存起来,再随机返回即可.不知道在考察什么? /*** Definition ...
- [Swift]LeetCode382. 链表随机节点 | Linked List Random Node
原文地址:https://www.cnblogs.com/strengthen/p/10282841.html Given a singly linked list, return a random ...
- 每天一道LeetCode-----复制一个带有随机节点的链表
Copy List with Random Pointer 原题链接Copy List with Random Pointer 深拷贝一个链表,链表节点的成员包括 指向下一个节点的指针 指向一个随机节 ...
- LeetCode 138 复制带随机指针的链表
题目描述 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的 深拷贝. 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表.每个节点 ...
- 【LeetCode】剑指 Offer 18. 删除链表的节点
[LeetCode]剑指 Offer 18. 删除链表的节点 文章目录 [LeetCode]剑指 Offer 18. 删除链表的节点 一.双指针 一.双指针 本题删除值为 val 的结点需分为两步: ...
- Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历
Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...
- 【Java】LeetCode 876 获取链表中间节点
题目:给定一个头结点为 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 解题思路 : 获取链表中间节点,算法思想是利用快慢指针 : 1.如上图分析,奇数节点链 ...
- Leetcode 24.两两交换链表的节点 (每日一题 20210624)
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表.你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换.示例 1:输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 ...
最新文章
- 重磅! SLAM从入门到精通系统教程汇总
- CentOS 7下彻底卸载MySQL数据库
- doc es 中type_一文带你彻底弄懂ES中的doc_values和fielddata
- 自托管websocket和webapi部署云服务器域名及远程访问
- java8 新特性实践
- 数学建模的13种常用的方法
- Android,六款安卓车机大PK
- sql casewhen
- 计算机硬盘检测和修复工具,教你怎么使用硬盘检测修复工具教程
- R语言plot函数参数合集
- 显示风场的某一局部区域,实现多分辨率
- 手机连不上电脑WIFI并且一直提示正在获取IP地址
- 第15课 模块与包
- [Cnbeta]企业与家用无线路由器的区别
- AI绘画能取代设计师吗?
- 经典背包问题3——背包问题求方案数 、背包问题求具体方案
- 最小二乘估计,矩阵求导法(正规方程)全推导
- bugku 杂项 图穷匕见 wp
- 清华计算机专硕非全日制,清华大学2018年非全日制MSW专业学位招生信息
- Blender(三维动画制作软件)字体汉化