美文网首页
js 蓄水池算法

js 蓄水池算法

作者: aaagu1234 | 来源:发表于2021-08-06 17:14 被阅读0次
  1. 单链表随机找一个节点,单链表长度未知,并且可能整个长度无法全部放入内存。
<script>
function ListNode(val, next) {
    this.val = (val===undefined ? 0 : val)
    this.next = (next===undefined ? null : next)
}
var head = new ListNode(1) ;
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5);
head.next.next.next.next.next = new ListNode(6);
head.next.next.next.next.next.next = new ListNode(7);
head.next.next.next.next.next.next.next = new ListNode(8);
head.next.next.next.next.next.next.next.next = new ListNode(9);
var Solution = function(head) {
     this.head = head;
};

 
Solution.prototype.getRandom = function() {
   var num = this.head.val;
   var next = this.head.next;
   var count = 1; 
   while(next){
      var ranNum = parseInt((count+1) *Math.random());// 随机[0,count] 之间的数字
      if(ranNum < 1){ // 因为是从单链表找一个节点,所以小于1,要是是蓄水池的长度是m的话,应该 ranNum < m,相应的num应该是一个数组类型
          num = next.val;
      }
      next = next.next;
      ++count;
   }
   return num;
};
//从单链表中随机寻找m个节点返回。
Solution.prototype.getRandom2 = function(m) {
 
   if(!m){ return []}
   var arr = [];
   var next = this.head;
   for(var i=0; i<m; i++){
      arr.push(next.val);
      next = next.next;
      if(!next){
        break;
      }
   }
   var count = m;
   while(next){
      var ranNum = parseInt((count+1) *Math.random())
      if(ranNum < m){
          arr[ranNum] = next.val;
      }
      next = next.next;
      ++count;
   }
   return arr;
};
var solution = new Solution(head);
var param1 = solution.getRandom();
var param2 = solution.getRandom2(3); 
</script>

相关文章

  • js 蓄水池算法

    单链表随机找一个节点,单链表长度未知,并且可能整个长度无法全部放入内存。

  • 蓄水池抽样算法(Reservoir Sampling)

    蓄水池抽样算法(Reservoir Sampling) 许多年以后,当听说蓄水池抽样算法时,邱simple将会想起...

  • 蓄水池算法

    问题描述: 给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素。你只能遍...

  • 蓄水池算法

    今天在网上看题目时,发现一个十分有趣的算法,叫蓄水池算法(Reservoir Sampling),牵扯到一点概率论...

  • 蓄水池算法

    最近有个需求,需要从不固定大小的数据集中取固定数量的数据作为样本,有个同学提到了蓄水池算法,于是了解了一下。 蓄水...

  • 2021-02-01 蓄水池抽样算法(Reservoir Sam

    蓄水池抽样算法(Reservoir Sampling)[https://www.jianshu.com/p/7a9...

  • leetcode382. Linked List Random

    这道题本质是到蓄水池算法 https://leetcode.com/problems/linked-list-ra...

  • 2018-07-02

    Q1: 蓄水池算法pick 1Q2: reverse linked listQ3: reverse linked ...

  • 蓄水池抽样算法

    问题描述 给出一个数据流,这个数据流的长度很大或者未知(内存无法一次性容纳下),并且对该数据流中数据只能访问一次。...

  • 蓄水池抽样算法

    面试题: 如果有一个文件很大,内存很大,不知道有多少行。你的任务是随机输出一行。文件只能遍历一次。解析:算法就是需...

网友评论

      本文标题:js 蓄水池算法

      本文链接:https://www.haomeiwen.com/subject/clcivltx.html