题目链接:https://leetcode.com/contest/4/problems/random-pick-index/
题目:
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.
思路:
easy。。。这题为什么会被放到contest? 是有时间、空间复杂度更低的解法吗?
算法
int []nums;
public Solution(int[] nums) {
this.nums = nums;
}
Random r = new Random();
public int pick(int target) {
ArrayList<Integer> idxs = new ArrayList<Integer>();
for(int i=0;i<nums.length;i++){
if(target==nums[i]){
idxs.add(i);
}
}
return idxs.get(r.nextInt(idxs.size()));
}