【LeetCode】抽样 sampling(共4题)
第一部分 水塘抽样 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题)的更多相关文章
- Leetcode 简略题解 - 共567题
Leetcode 简略题解 - 共567题 写在开头:我作为一个老实人,一向非常反感骗赞.收智商税两种行为.前几天看到不止两三位用户说自己辛苦写了干货,结果收藏数是点赞数的三倍有余,感觉自己的 ...
- 【LeetCode】堆 heap(共31题)
链接:https://leetcode.com/tag/heap/ [23] Merge k Sorted Lists [215] Kth Largest Element in an Array (无 ...
- 【LeetCode】排序 sort(共20题)
链接:https://leetcode.com/tag/sort/ [56]Merge Intervals (2019年1月26日,谷歌tag复习) 合并区间 Input: [[1,3],[2,6], ...
- 【LeetCode】动态规划(下篇共39题)
[600] Non-negative Integers without Consecutive Ones [629] K Inverse Pairs Array [638] Shopping Offe ...
- 【LeetCode】二叉查找树 binary search tree(共14题)
链接:https://leetcode.com/tag/binary-search-tree/ [220]Contains Duplicate III (2019年4月20日) (好题) Given ...
- 【LeetCode】数学(共106题)
[2]Add Two Numbers (2018年12月23日,review) 链表的高精度加法. 题解:链表专题:https://www.cnblogs.com/zhangwanying/p/979 ...
- 【LeetCode】位运算 bit manipulation(共32题)
[78]Subsets 给了一个 distinct 的数组,返回它所有的子集. Example: Input: nums = [,,] Output: [ [], [], [], [,,], [,], ...
- 【LeetCode】哈希表 hash_table(共88题)
[1]Two Sum (2018年11月9日,k-sum专题,算法群衍生题) 给了一个数组 nums, 和一个 target 数字,要求返回一个下标的 pair, 使得这两个元素相加等于 target ...
- 【LeetCode】树(共94题)
[94]Binary Tree Inorder Traversal [95]Unique Binary Search Trees II (2018年11月14日,算法群) 给了一个 n,返回结点是 1 ...
随机推荐
- github上拉去代码执行 npm install报错code:128
npm ERR! code npm ERR! Command failed: D:\Program Files\Git\cmd\git.EXE clone --mirror -q git://gith ...
- web应用,http协议简介,web框架
一.web应用 web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件.应用程序有两种模式C/S.B/S.C/S是客户端 ...
- vim安装bundle和使用
一.准备工作 安装Git(因为下面我们选择的插件管理器需要使用到它)安装其他插件前首先需要选择一个Vim插件管理器,我这里选择的是Vundle,Vundle的工作过程中需要通过Git自动从远程创库同步 ...
- CSS中属性百分比的基准点
1.属性百分比的基准点 1.1.基于包含块 以下的关于包含块(含块)的概念,不能简单地理解成是父元素. 如果是静态定位和相对定位,包含块一般就是其父元素.但是对于绝对定位的元素,包含块应该是离它最近的 ...
- Ubuntu安装及sshd服务安装,yum安装等总结
vm网络选择自定义.指定的虚拟网络,自动桥连. 1.设置root初始密码 ubuntu安装好后,root初始密码(默认密码)不知道,需要设置.1.先用安装时候的用户登录进入系统2.输入:sudo ...
- Strange fuction hdu 2899
Strange fuction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- css选择器的组合示例
案例一demo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- Android 一键分享功能简单实现
import java.io.File;import java.util.ArrayList;import java.util.List; import android.content.Context ...
- EZOJ #389点分治好题
分析 一层一层把叶子去掉 看最多能去掉多少层即可 代码 #include<bits/stdc++.h> using namespace std; ],du[],fa[],n,m,ans; ...
- 测开之路七十七:shell之if、case、for、while
选择语句(if语句) 大于:-gt判断目录是否存在:-d if [ 判断条件 ]; then statement1 Statement2elif [ 判断条件 ]; then statement1 S ...