第一部分 水塘抽样 reservoir sampling

水塘抽样的原理:(应该开一篇新文章)pssss

【382】Linked List Random Node (2018年11月15日,新算法)

给了一个单链表,要求等概率的返回单链表的一个结点的值。

解法:我直接随便解了,能过,但是肯定不是面试官想要的XD。先遍历一遍链表求链表长度,然后随机一个出这次是第 x 个结点,(x = rand() % length),然后再遍历到这个结点返回值。

 /**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
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) {
ListNode* cur = head;
h1 = head;
for (; cur; cur = cur->next) {
length++;
}
} /** Returns a random node's value. */
int getRandom() {
int node = rand() % length;
auto cur = h1;
for (int i = ; i < node; ++i) {
cur = cur->next;
}
return cur->val;
}
int length = ;
ListNode* h1;
}; /**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(head);
* int param_1 = obj.getRandom();
*/

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?

【398】Random Pick Index(2018年11月15日,新算法)

给了一个数组 nums 和一个目标数字 target,要求完成一个设计的题目,等概率的返回 nums 中值为 target 的下标。

题解:我第一次解还是依旧按照按照自己节奏,用了一个 unordered_map<int, vector<int>> 记录数组中值和下标的对应关系。然后在 pick 下标的时候,先把值的下标集合搞出来,然后再随机这个下标值。

 class Solution {
public:
Solution(vector<int> nums) {
for (int i = ; i < nums.size(); ++i) {
mp[nums[i]].push_back(i);
}
} int pick(int target) {
vector<int> vec = mp[target];
int idx = rand() % vec.size();
return vec[idx];
}
unordered_map<int, vector<int>> mp;
}; /**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(nums);
* int param_1 = obj.pick(target);
*/

本题用 reservior sampling 应该怎么解待补充。

第二部分 拒绝采样 rejection sampling

【470】Implement Rand10() Using Rand7()

用 rand7() 这个函数生成 rand10() 这个函数的功能。

题解在random专题里面已经写了。orz。 公式是 (randX() - 1) * X + (randX() - 1)

random 专题链接:https://www.cnblogs.com/zhangwanying/p/9964660.html

【478】Generate Random Point in a Circle

【LeetCode】抽样 sampling(共4题)的更多相关文章

  1. Leetcode 简略题解 - 共567题

    Leetcode 简略题解 - 共567题     写在开头:我作为一个老实人,一向非常反感骗赞.收智商税两种行为.前几天看到不止两三位用户说自己辛苦写了干货,结果收藏数是点赞数的三倍有余,感觉自己的 ...

  2. 【LeetCode】堆 heap(共31题)

    链接:https://leetcode.com/tag/heap/ [23] Merge k Sorted Lists [215] Kth Largest Element in an Array (无 ...

  3. 【LeetCode】排序 sort(共20题)

    链接:https://leetcode.com/tag/sort/ [56]Merge Intervals (2019年1月26日,谷歌tag复习) 合并区间 Input: [[1,3],[2,6], ...

  4. 【LeetCode】动态规划(下篇共39题)

    [600] Non-negative Integers without Consecutive Ones [629] K Inverse Pairs Array [638] Shopping Offe ...

  5. 【LeetCode】二叉查找树 binary search tree(共14题)

    链接:https://leetcode.com/tag/binary-search-tree/ [220]Contains Duplicate III (2019年4月20日) (好题) Given ...

  6. 【LeetCode】数学(共106题)

    [2]Add Two Numbers (2018年12月23日,review) 链表的高精度加法. 题解:链表专题:https://www.cnblogs.com/zhangwanying/p/979 ...

  7. 【LeetCode】位运算 bit manipulation(共32题)

    [78]Subsets 给了一个 distinct 的数组,返回它所有的子集. Example: Input: nums = [,,] Output: [ [], [], [], [,,], [,], ...

  8. 【LeetCode】哈希表 hash_table(共88题)

    [1]Two Sum (2018年11月9日,k-sum专题,算法群衍生题) 给了一个数组 nums, 和一个 target 数字,要求返回一个下标的 pair, 使得这两个元素相加等于 target ...

  9. 【LeetCode】树(共94题)

    [94]Binary Tree Inorder Traversal [95]Unique Binary Search Trees II (2018年11月14日,算法群) 给了一个 n,返回结点是 1 ...

随机推荐

  1. Knative 实战:基于 Knative Serverless 技术实现天气服务

    提到天气预报服务,我们第一反应是很简单的一个服务啊,目前网上有大把的天气预报 API 可以直接使用,有必要去使用 Knative 搞一套吗?杀鸡用牛刀?先不要着急,我们先看一下实际的几个场景需求: 场 ...

  2. AutoLayout面试题记录-自动布局

    1. 面试上海某家软件公司,题目是这样,有一个View,距左右父View长度一定,高度一定.这个View上面有4个小View,高度相同(或者说一定), 要求不管屏幕怎么变,这4个小View总是等宽平分 ...

  3. BZOJ 2729: [HNOI2012]排队 排列组合 + 高精度

    Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那么一共有多少种排法呢?(注意:任意两个人都是不 ...

  4. js常见的几种设计模式

    一.单例模式 单例模式也称作为单子模式,更多的也叫做单体模式.为软件设计中较为简单但是最为常用的一种设计模式. 在JavaScript里,实现单例的方式有很多种,其中最简单的一个方式是使用对象字面量的 ...

  5. 535D Tavas and Malekas

    题目大意 给你一个串和m个下标 问你一个长度为n的串每一个下标开始的后缀的前缀都包含给定的串的方案数 分析 对于给定的串求出z数组 对于两个串不重叠的情况就是中间都不包含的数随便填即可 对于重叠的情况 ...

  6. python脚本-上传apk至蒲公英

    import requests import os #账号配置信息 url = "https://upload.pgyer.com/apiv1/app/upload" uKey = ...

  7. vue全局自定义指令-元素拖拽

    小白我用的是vue-cli的全家桶,在标签中加入v-drap则实现元素拖拽, 全局指令我是写在main.js中 Vue.directive('drag', { inserted: function ( ...

  8. WPF数据模板中绑定事件不触发问题

    今天比较闲,做一个练手的项目,结果在xaml中写了一个用户的数据模板后,在其中的某个Canvas上绑定了一个鼠标左击的事件,结果调试的时候,无论怎么点击都不跳到断点那里,百思不得其解. 之后尝试不绑定 ...

  9. Python程序打包为可执行文件exe

    Python程序打包为可执行文件exe,pyinstaller应用 山重水复疑无路,柳暗花明又一村. 本来是向老师提交一个python程序,因为第一次所以就很尴尬只把源码给老师了,应该是打包成一个可执 ...

  10. pygame应用——生产者消费者模型

    因为操作系统的一个生产者-消费者拓展作业,以一个飞机大战的模型修改来的 import pygame import time from pygame.locals import * bulletsNum ...