8.30 链表

- to do

- linked-list-random-node

水塘抽样是一系列的随机算法,其目的在于从包含n个项目的集合S中选取k个样本,其中n为一很大或未知的数量,尤其适用于不能把所有n个项目都存放到主内存的情况。最常见例子为Jeffrey Vitter在其论文[1]
中所提及的算法R
参照Dictionary of Algorithms and Data Structures[2]
所载的O(n)算法,包含以下步骤(假设阵列S以0开始标示):
從S中抽取首k項放入「水塘」中對於每一個S[j]項(j ≥ k): 隨機產生一個範圍從0到j的整數r 若 r < k 則把水塘中的第r項換成S[j]項

class Solution {
private: 
  ListNode* head;
public: 
/** @param head The linked list's head. Note that the head is guanranteed to be not null, so it contains at least one node. */ Solution(ListNode* head) { 
  this->head = head; 
} 
  /** Returns a random node's value. */ 
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; 
}
};

推荐阅读更多精彩内容

  • 模仿这事,做得好,就叫致敬,做得糟,就叫抄袭。电影界历来不缺那些因东拼西凑而备受诟病的作品,比如那简直就是岩井俊二...
    Pegasus9127阅读 91评论 0 2
  • 很多外地的小伙伴一直恳请菜菜屋分享一篇泡菜的文章,菜菜屋的拖延症实在厉害,一拖就是好几个月,实在是盛情难却,今天就...
    食趣菜菜屋阅读 557评论 3 7
  • 加油
    JessieZhai阅读 89评论 0 0
  • 喜欢篮球很多年,从上学到现在,篮球没有离开过我的生活,自从结婚后,打篮球的时间越来越少,很少有机会再像以前一样...
    救赎的公牛阅读 110评论 0 0
  • 她的世界里 要吃要玩要拥抱 呵呵哈哈时你会快乐 哼哼唧唧时你会慌张 呜啊呜啊时你会着急 你想让她快乐 那也是你的快...
    老板娘多少钱阅读 53评论 0 0