【Leetcode】398. Random Pick Index
阿新 • • 發佈:2020-12-29
技術標籤:# 棧、佇列、串及其他資料結構leetcode資料結構java演算法
題目地址:
https://leetcode.com/problems/random-pick-index/
給定一個數組 A A A,要求設計一個數據結構,給定一個數 t t t,可以隨機等概率返回其在 A A A中的下標(中的一個)。題目保證 A A A裡含 t t t。
用一個雜湊表存一下每個數出現的下標列表即可。程式碼如下:
import java.util.*;
public class Solution {
private Random random;
private Map< Integer, List<Integer>> map;
public Solution(int[] nums) {
random = new Random();
map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
map.putIfAbsent(nums[i], new ArrayList<>());
map.get(nums[i]).add(i);
}
}
public int pick(int target) {
List<Integer> list = map.get(target);
return list.get(random.nextInt(list.size()));
}
}
初始化時間複雜度 O ( l A ) O(l_A) O(lA),pick時間複雜度 O ( 1 ) O(1) O(1),空間 O ( l A ) O(l_A) O(lA)。