[Leetcode] 398. Random Pick Index 解题报告
来源:互联网 发布:大数据的统计学基础 编辑:程序博客网 时间:2024/06/08 12:26
题目:
Given an array of integers with possible duplicates, randomly output the index of a given target number. You can assume that the given target number must exist in the array.
Note:
The array size can be very large. Solution that uses too much extra space will not pass the judge.
Example:
int[] nums = new int[] {1,2,3,3,3};Solution solution = new Solution(nums);// pick(3) should return either index 2, 3, or 4 randomly. Each index should have equal probability of returning.solution.pick(3);// pick(1) should return 0. Since in the array only nums[0] is equal to 1.solution.pick(1);
思路:
对于大数据而言水池采样是神器:我们遍历数组的时候,如果发现了新的target,则让它以一定的概率转移到该索引上。有兴趣的读者可以参考水池采样的问题描述及正确性证明:https://en.wikipedia.org/wiki/Reservoir_sampling。该算法的时间复杂度是O(n),其中n是数组的长度;空间复杂度是O(1)。
代码:
class Solution {public: Solution(vector<int> nums) { vec = nums; } int pick(int target) { int ans = 0, cnt = 1; for(int i = 0; i < vec.size(); ++i) { if(vec[i] == target && rand() % (cnt++) == 0) { ans = i; } } return ans; }private: vector<int> vec;};/** * Your Solution object will be instantiated and called as such: * Solution obj = new Solution(nums); * int param_1 = obj.pick(target); */
阅读全文
0 0
- [leetcode] 398. Random Pick Index 解题报告
- [Leetcode] 398. Random Pick Index 解题报告
- Leetcode 398. Random Pick Index 随机找位置 解题报告
- 【Leetcode】398. Random Pick Index
- Leetcode 398. Random Pick Index
- [LeetCode] 398. Random Pick Index
- LeetCode 398. Random Pick Index
- [Leetcode]398. Random Pick Index
- 【Leetcode】398. Random Pick Index
- 【LeetCode】 398. Random Pick Index
- LeetCode 398. Random Pick Index
- [leetcode]398. Random Pick Index
- [LeetCode]398. Random Pick Index
- Leetcode-398. Random Pick Index
- [leetcode] 398. Random Pick Index
- leetcode 398. Random Pick Index
- [LeetCode] 398. Random Pick Index
- leetcode 398. Random Pick Index
- java中输入char类型的数据
- github项目学习--Vue结合Pug模板引擎
- 加深理解指针的四个实验
- clientX, pageX, offsetX, screenX
- gp
- [Leetcode] 398. Random Pick Index 解题报告
- [LeetCode]199. Binary Tree Right Side View
- vivado仿真出错:[USF-XSim 62] 'compile' step failed with error(s) while executing
- 剖析Picasso加载压缩本地图片流程(解决Android 5.0部分机型无法加载本地图片的问题)
- Java中的值传递
- 【学习笔记】mysql基础命令及配置信息
- 1675:勾股数
- oracle行列互换
- C/C++:各种基本算法实现小结(二)—— 堆 栈