个人博客网站模板下载,网站报备查询,淮安市建设局网站首页,湖南建筑网1. 题目
给定一个可能含有重复元素的整数数组#xff0c;要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中。
注意#xff1a; 数组大小可能非常大。 使用太多额外空间的解决方案将不会通过测试。
示例:
int[] nums new int[] {1,2,3,3,3};
Solutio…1. 题目
给定一个可能含有重复元素的整数数组要求随机输出给定的数字的索引。 您可以假设给定的数字一定存在于数组中。
注意 数组大小可能非常大。 使用太多额外空间的解决方案将不会通过测试。
示例:
int[] nums new int[] {1,2,3,3,3};
Solution solution new Solution(nums);// pick(3) 应该返回索引 2,3 或者 4。每个索引的返回概率应该相等。
solution.pick(3);// pick(1) 应该返回 0。因为只有nums[0]等于1。
solution.pick(1);来源力扣LeetCode 链接https://leetcode-cn.com/problems/random-pick-index 著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。 2. 蓄水池抽样
类似题目LeetCode 519. 随机翻转矩阵哈希
遇到 target计数1然后用 计数分之1的概率去替换之前找到的 target 的下标
class Solution {vectorint arr;int i, idx, count;bool Occur;
public:Solution(vectorint nums) {arr nums;}int pick(int target) {Occur false;count 0;for(i 0; i arr.size(); i){if(arr[i] target){if(!Occur){idx i;Occur true;count 1;}else{count;if(rand()%count 0)//有 1/count 的概率等于0idx i;}}}return idx;}
};