题目链接: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()));
	}