1. 程式人生 > 其它 >【Leetcode】398. Random Pick Index

【Leetcode】398. Random Pick Index

技術標籤:# 棧、佇列、串及其他資料結構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)