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. 链表随机节点(概率)相关推荐

  1. Leetcode 382. 链表随机节点 解题思路及C++实现

    解题思路: 因为题目中要求需要常数级的空间复杂度,所以就需要计算链表长度了. /*** Definition for singly-linked list.* struct ListNode {* i ...

  2. leetcode 382. Linked List Random Node | 382. 链表随机节点(Java)

    题目 https://leetcode.com/problems/linked-list-random-node/ 题解 先存起来,再随机返回即可.不知道在考察什么? /*** Definition ...

  3. [Swift]LeetCode382. 链表随机节点 | Linked List Random Node

    原文地址:https://www.cnblogs.com/strengthen/p/10282841.html Given a singly linked list, return a random ...

  4. 每天一道LeetCode-----复制一个带有随机节点的链表

    Copy List with Random Pointer 原题链接Copy List with Random Pointer 深拷贝一个链表,链表节点的成员包括 指向下一个节点的指针 指向一个随机节 ...

  5. LeetCode 138 复制带随机指针的链表

    题目描述 给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点. 要求返回这个链表的 深拷贝. 我们用一个由 n 个节点组成的链表来表示输入/输出中的链表.每个节点 ...

  6. 【LeetCode】剑指 Offer 18. 删除链表的节点

    [LeetCode]剑指 Offer 18. 删除链表的节点 文章目录 [LeetCode]剑指 Offer 18. 删除链表的节点 一.双指针 一.双指针 本题删除值为 val 的结点需分为两步: ...

  7. Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历

    Top1:Leetcode 129求根节点到叶节点数字之和 官方题解:https://leetcode.cn/problems/sum-root-to-leaf-numbers/solution/qi ...

  8. 【Java】LeetCode 876 获取链表中间节点

    题目:给定一个头结点为 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 解题思路 : 获取链表中间节点,算法思想是利用快慢指针 : 1.如上图分析,奇数节点链 ...

  9. Leetcode 24.两两交换链表的节点 (每日一题 20210624)

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表.你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换.示例 1:输入:head = [1,2,3,4] 输出:[2,1,4,3] 示例 ...

最新文章

  1. 重磅! SLAM从入门到精通系统教程汇总
  2. CentOS 7下彻底卸载MySQL数据库
  3. doc es 中type_一文带你彻底弄懂ES中的doc_values和fielddata
  4. 自托管websocket和webapi部署云服务器域名及远程访问
  5. java8 新特性实践
  6. 数学建模的13种常用的方法
  7. Android,六款安卓车机大PK
  8. sql casewhen
  9. 计算机硬盘检测和修复工具,教你怎么使用硬盘检测修复工具教程
  10. R语言plot函数参数合集
  11. 显示风场的某一局部区域,实现多分辨率
  12. 手机连不上电脑WIFI并且一直提示正在获取IP地址
  13. 第15课 模块与包
  14. [Cnbeta]企业与家用无线路由器的区别
  15. AI绘画能取代设计师吗?
  16. 经典背包问题3——背包问题求方案数 、背包问题求具体方案
  17. 最小二乘估计,矩阵求导法(正规方程)全推导
  18. bugku 杂项 图穷匕见 wp
  19. 清华计算机专硕非全日制,清华大学2018年非全日制MSW专业学位招生信息
  20. Blender(三维动画制作软件)字体汉化

热门文章

  1. java二级考试备考_2017计算机二级考试《JAVA》备考测试题「带答案」
  2. 计算机等级考试2010,2010年全国计算机等级考试相关政策
  3. 假期第一次编程总结(改二)
  4. npm 安装包报错 rollbackFailedOptional
  5. 使用NVM管理Node - Windows
  6. LeetCode872. Leaf-Similar Trees
  7. C语言程序返回值为int的时候,不同值代表不同的意义
  8. Chrome插件(扩展)
  9. 【学习总结】Markdown 使用的正确姿势
  10. 教你遇事最有水平的处理方法