leetcode 398. Random Pick Index 均概率挑选index

来源:互联网 发布:淘宝怎么提前收款 编辑:程序博客网 时间:2024/05/17 04:49

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);

题意很简单,就是均匀概率的挑选相关index,我是网上看的做法,就这么做吧

代码如下:

#include <iostream>#include <vector>#include <map>#include <set>#include <queue>#include <stack>#include <string>#include <climits>#include <algorithm>#include <sstream>using namespace std;class Solution {    vector<int> a;public:    Solution(vector<int> nums)     {        a = nums;    }    int pick(int target)     {        int n = 0, ans = -1;        for (int i = 0; i < a.size(); i++)         {            if (a[i] != target)                 continue;            if (n == 0)             {                 ans = i;                n++;             }            else             {                n++;                if (rand() % n == 0) { ans = i; }// with prob 1/(n+1) to replace the previous index            }        }        return ans;    }};
原创粉丝点击