classSolution{public:Solution(intN,vector<int>&blacklist):validRange(N-blacklist.size()){for(constintb:blacklist)map[b]=-1;intmaxAvailable=N-1;for(constintb:blacklist)if(b<validRange){while(map.count(maxAvailable))// Find the slot that haven't been used--maxAvailable;map[b]=maxAvailable--;}}intpick(){constintnum=rand()%validRange;returnmap.count(num)?map[num]:num;}private:constintvalidRange;unordered_map<int,int>map;};