add: 220425-CN [cpp]

This commit is contained in:
eat-swap 2022-04-25 23:37:53 +08:00
parent 94f0aa7091
commit f61727af1e
No known key found for this signature in database
GPG Key ID: 8C089CB1A2B7544F
2 changed files with 32 additions and 1 deletions

31
cpp/2204/220425-CN.cpp Normal file
View File

@ -0,0 +1,31 @@
#include <vector>
#include <random>
#include <ctime>
#include <unordered_map>
/**
* 398. Random Pick Index
* Given an integer array nums 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.
* Implement the Solution class:
* Solution(int[] nums) Initializes the object with the array nums.
* int pick(int target) Picks a random index i from nums where nums[i] == target. If there are multiple valid i's, then each index should have an equal probability of returning.
*/
class Solution {
private:
std::unordered_map<int, std::vector<int>> m;
std::mt19937 r;
public:
explicit Solution(const std::vector<int>& nums) : r(std::time(nullptr)) {
auto x = nums.size();
while (x--) {
m[nums[x]].push_back(x);
}
}
int pick(int target) {
return m[target][r() % m[target].size()];
}
};

View File

@ -3,4 +3,4 @@ PROJECT(2204)
SET(CMAKE_CXX_STANDARD 23)
ADD_EXECUTABLE(2204 220425.cpp)
ADD_EXECUTABLE(2204 220425-CN.cpp)