码迷,mamicode.com
首页 > 其他好文 > 详细

710. Random Pick with Blacklist - LeetCode

时间:2018-07-13 17:41:53      阅读:461      评论:0      收藏:0      [点我收藏+]

标签:problems   length   http   param   []   return   java   --   black   

Question

710. Random Pick with Blacklist

技术分享图片

Solution

题目大意:给一个N,表示一个范围[0,N),给一个黑名单列表blacklist,其中blacklist中的元素在[0,N)范围内,调用pick方法的时候随机返回一个数,这个数满足

  1. 在[0,N)范围
  2. 不在blacklist内
  3. 要随机

思路:构造一个集合M,该M是 [0,N) - blacklist 的一个集合,调用pick时,返回[0,M)的一个随机数并根据这个随机数从集合M中取数即可。

Java实现:

class Solution {
    int M;
    Map<Integer, Integer> map;
    Random r;
    public Solution(int N, int[] blacklist) {
        M = N - blacklist.length;
        map = new HashMap<>();
        r = new Random();
        for (int tmp : blacklist) {
            map.put(tmp, -1);
        }
        
        for (int tmp : blacklist) {
            if (tmp < M) {
                while (map.containsKey(N-1)) {
                    N--;
                }
                map.put(tmp, --N);
            }
        }
    }

    public int pick() {
        // random in [0,N) not in blacklist
        int p = r.nextInt(M);
        if (map.containsKey(p)) return map.get(p);
        return p;
    }
}

/**
 * Your Solution object will be instantiated and called as such:
 * Solution obj = new Solution(N, blacklist);
 * int param_1 = obj.pick();
 */

710. Random Pick with Blacklist - LeetCode

标签:problems   length   http   param   []   return   java   --   black   

原文地址:https://www.cnblogs.com/okokabcd/p/9305770.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!