Problem statement could be found @https://leetcode.com/problems/random-pick-index/
Initial approach - Initially I started by creating a map of elements and their index list but this got TLE as the memory is given as constraint. The reason for this thought was index once and query multiple times.
Second approach - Compare the values on fly and save matching indexes. Then generate random value and mod by nos of instances of matching indexes, using the value received after mod to do find the index. This was accepted
Following is the code with second approach
class Solution {
vector<int> elementVector;
size_t vectorSize ;
public:
Solution(vector<int> nums) {
elementVector = nums;
vectorSize = nums.size();
}
int pick(int target) {
vector<int> indexVect;
for (int i=0;i<vectorSize; i++){
if (elementVector[i] == target)
indexVect.push_back(i);
}
int indexSize = indexVect.size();
int randVal = (rand()%indexSize);
return indexVect[randVal];
}
};
Initial approach - Initially I started by creating a map of elements and their index list but this got TLE as the memory is given as constraint. The reason for this thought was index once and query multiple times.
Second approach - Compare the values on fly and save matching indexes. Then generate random value and mod by nos of instances of matching indexes, using the value received after mod to do find the index. This was accepted
Following is the code with second approach
class Solution {
vector<int> elementVector;
size_t vectorSize ;
public:
Solution(vector<int> nums) {
elementVector = nums;
vectorSize = nums.size();
}
int pick(int target) {
vector<int> indexVect;
for (int i=0;i<vectorSize; i++){
if (elementVector[i] == target)
indexVect.push_back(i);
}
int indexSize = indexVect.size();
int randVal = (rand()%indexSize);
return indexVect[randVal];
}
};
No comments:
Post a Comment