Given an input array that consists of numbers that may consist of duplicates, return the position of the number that is picked. This position has to be a “Random Pick Index” if the picked number has duplicates.
Example: Input: [1, 2, 4, 4, 4], Pick -> 4 then you can return 2, 3, or 4 randomly with equal probability. If 1 is the pick then 0 needs to be returned as there is only one occurrence at 0.
/**
* @param {number[]} nums
*/
var Solution = function(nums) {
this.obj = {};
for (let i = 0; i < nums.length; i++) {
if (this.obj[nums[i]] === undefined)
this.obj[nums[i]] = [];
this.obj[nums[i]].push(i);
}
};
/**
* @param {number} target
* @return {number}
*/
Solution.prototype.pick = function(target) {
var dupes = this.obj[target].length;
return dupes === 1 ?
this.obj[target][0] :
this.obj[target][Math.floor(dupes * Math.random())];
};
/**
* Your Solution object will be instantiated and called as such:
* var obj = new Solution(nums)
* var param_1 = obj.pick(target)
*/