码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]Reservoir Sampling-382. Linked List Random Node

时间:2018-01-13 20:49:35      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:chosen   body   nbsp   pos   value   his   lis   ==   either   

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();
class Solution {
private:
    ListNode* head;
public:
    Solution(ListNode* head) {
        this->head = head;
    }

    int getRandom() {
        int res = head->val;
        ListNode* node = head->next;
        int i = 2;
        while(node){
            int j = rand()%i;
            if(j==0)
                res = node->val;
            i++;
            node = node->next;
        }
        return res;
    }
};

 

[leetcode]Reservoir Sampling-382. Linked List Random Node

标签:chosen   body   nbsp   pos   value   his   lis   ==   either   

原文地址:https://www.cnblogs.com/chenhan05/p/8280312.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!