398. Random Pick Index
https://leetcode.com/problems/random-pick-index/
Related problems
380-insert-delete-getrandom-o1
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.
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);---
Related problems
380-insert-delete-getrandom-o1
382-linked-list-random-node
528-random-pick-with-weight
---
528-random-pick-with-weight
---
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
Map<Integer, List<Integer>> indexMap = new HashMap<Integer, List<Integer>>(); | |
Random random; | |
public Solution(int[] nums) { | |
random = new Random(); | |
for (int i = 0; i < nums.length; i++) { | |
indexMap.putIfAbsent(nums[i], new ArrayList<Integer>()); | |
indexMap.get(nums[i]).add(i); | |
} | |
} | |
public int pick(int target) { | |
List<Integer> indexes = indexMap.get(target); | |
return indexes.get(random.nextInt(indexes.size())); | |
} | |
} | |
/** | |
* Your Solution object will be instantiated and called as such: | |
* Solution obj = new Solution(nums); | |
* int param_1 = obj.pick(target); | |
*/ |