Java: Slow solution but a different approach
Basically, I divided the value of  N into intervals using blacklist values\nAfter that I have a list of intervals from where I can pick the values.\n\n1st call 
Basically, I divided the value of  N into intervals using blacklist values\nAfter that I have a list of intervals from where I can pick the values.\n\n1st call to random picks the index in the list to find a interval\n2nd call to random picks the value from that inteval\n\n```\nclass Solution {\n\n    List<Pair> list = null;\n\n    public Solution(int N, int[] blacklist) {\n        this.list = new ArrayList();\n        Arrays.sort(blacklist);\n        createIntervals(blacklist, N);\n    }\n\n    private void createIntervals(int[] bl, int N) {\n        int start = 0;\n        if (bl.length == 0) {\n            list.add(new Pair(0, N));\n            return;\n        }\n        for(int i=0 ; i<bl.length ; i++){\n            if(bl[i] - start > 0){\n                list.add(new Pair(start, bl[i]));\n            }\n            start = bl[i]+1;\n        }\n        if (start < N) {\n            list.add(new Pair(start, N));\n        }\n    }\n        \n    public int pick() {\n        int location = ThreadLocalRandom.current().nextInt(0, list.size());\n        Pair p = list.get(location);\n        int ans = ThreadLocalRandom.current().nextInt(p.start, p.end);\n        return ans;\n    }\n\n    class Pair {\n        int start, end;\n\n        Pair(int s, int e) {\n            start = s;\n            end = e;\n        }\n    }\n}\n\n```
[]