【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 ...
随机推荐
- plafrom SDK
{ //http://www.alipay-seller.mpymnt.com/node/82 //https://blog.csdn.net/xiaopingping1234567/article/ ...
- Linux系统下安装jenkins使用
jenkins 2.190.1 yum 安装 devops一梦千年 发布时间:10-0916:28 jenkins 2.190.1 yum 安装记录 安装环境: 所需安装包: https://pkg. ...
- linux运维、架构之路-linux用户管理
一. linux系统用户分类 1.分类 ①超级用户:root,UID为0 ②普通用户:UID是500-65535的用户 ③虚拟用户:UID在1-499,一般不能登录,满足文件或服务启动的需要,/sbi ...
- 9:关于Maven工程的文件标识(定义java文件源码,资源文件)
- 【转】iis解决应用程序池**提供服务的进程意外终止进程ID是**。进程退出代码是'0x80'
转自:http://blog.sina.com.cn/s/blog_56a68d5501013xdd.html 我们公司旗下的红黑互联会遇到这种问题 事件类型: 警告事件来源: W3SVC事件种类: ...
- Shiro学习资料
这篇博客的作者是张开涛,他写了很多专题文章,值得关注一下. 博客专栏 - 跟我学Shirohttp://www.iteye.com/blogs/subjects/shiro
- sql server查询结果复制出来,没有换行(存进去的数据是换行的)
https://stackoverflow.com/questions/53115490/how-to-correctly-insert-newline-in-nvarchar The problem ...
- Step2 - How to: Implement a Windows Communication Foundation Service Contract
This is the second of six tasks required to create a basic Windows Communication Foundation (WCF) se ...
- cron 定时任两种配置方式
第一种:xml文件方式 <bean id="commonTimer" class="com.course.wx.timer.CommonTimer"> ...
- Vagrant 手册之同步目录 - VirtualBox
原文地址 如果你使用的 provider 是 VirtualBox,那么 VirtualBox 同步目录就是默认的同步目录类型.这些同步目录使用 VirtualBox 的共享目录系统来同步客户机跟宿主 ...