[leetcode]-Linked List Random Node
2016-08-18 00:48
465 查看
题目描述:
给定一个单向的链表,要求以相等的概率返回要求:
时间复杂度o(n),空间复杂度o(1)原文描述:
Given a singly linked list, return a random node’s value from the linked list. Each node must have the same probability of being chosen.Follow up:
What if the linked list is extremely large and its length is unknown to you? Could you solve this efficiently without using extra space?Example:
// Init a singly linked list [1,2,3]. ListNode head = new ListNode(1); head.next = new ListNode(2); head.next.next = new ListNode(3); Solution solution = new Solution(head); // getRandom() should return either 1, 2, or 3 randomly. Each element should have equal probability of returning. solution.getRandom();
思路分析:
因为链表的长度不固定,也没法通过下标取值,只能一边遍利,一边取值考虑在遍历时候,动态记录长度n,然后保证当前值的返回概率是1/n,我们以第2个数为例(就是head.next.val)选取的概率为(1/2)* (2/3)(3/4) ……….. (n-1) / n = 1/n (选取第2个数在长度为2的时候为1/2,其他的都不要选)而对于任意的第x数,由于可以覆盖前面的数,均有: (1/x) * (x/(x+1)) *…….(n-1) / n = 1/n
第n个数就直接1/n
-
代码:
import java.util.Random; public class Solution { /** @param head The linked list's head. Note that the head is guaranteed to be not null, so it contains at least one node. */ ListNode head = null; Random random = null; public Solution(ListNode head) { this.head = head; random = new Random(); } /** Returns a random node's value. */ public int getRandom() { ListNode result = null; ListNode current = head; for(int n = 1;current != null;n++){ if(random.nextInt(n) == 0){ result = current; } current = current.next; } return result.val; } }
我的微信二维码如下,欢迎交流讨论
欢迎关注《IT面试题汇总》微信订阅号。每天推送经典面试题和面试心得技巧,都是干货!
微信订阅号二维码如下:
相关文章推荐
- [leetcode]-Linked List Random Node
- [leetcode]-Linked List Random Node
- node之hello world
- Flume采集日志遇到Hadoop的datanode为0的解决方案。
- ROS node调用service: ros::service::call/client.call()
- node.js运行环境变量配置
- UVALive 7456 Least Crucial Node (并查集)
- UVALive 7456 Least Crucial Node
- ZooKeeper web管理安装node-zk-browser
- Hadoop2动态调整Log级别-以datanode的heartbeat log为例
- Hadoop2动态调整Log级别-以datanode的heartbeat log为例
- node.js学习笔记目录
- NodeJs系列二:你好,世界
- find distance between two nodes in a binary tree
- node -- 使用UEditor富文本编辑器
- Nodejs学习总结 -Express入门(一)
- nw.js node-webkit系列(25)child_process中spawn和exec方法的使用
- 382. Linked List Random Node
- LeetCode - Linked List Random Node
- Nodewebkit 设置任务栏图标