方法:模拟
class SmallestInfiniteSet {
PriorityQueue<Integer> pq = new PriorityQueue<>();
public SmallestInfiniteSet() {
for (int i = 1; i <= 1000; i++){
pq.offer(i);
}
}
public int popSmallest() {
return pq.poll();
}
public void addBack(int num) {
if (!pq.contains(num)){
pq.offer(num);
}
}
}
/**
* Your SmallestInfiniteSet object will be instantiated and called as such:
* SmallestInfiniteSet obj = new SmallestInfiniteSet();
* int param_1 = obj.popSmallest();
* obj.addBack(num);
*/
class SmallestInfiniteSet {
Set<Integer> hash = new HashSet<>();
Queue<Integer> pq = new PriorityQueue<>();
public SmallestInfiniteSet() {
for (int i = 1; i < 1005; i++) {
pq.add(i);
}
}
public int popSmallest() {
int tmp = pq.poll();
hash.add(tmp);
return tmp;
}
public void addBack(int num) {
if (hash.contains(num)) {
hash.remove(num);
pq.add(num);
}
}
}
/**
* Your SmallestInfiniteSet object will be instantiated and called as such:
* SmallestInfiniteSet obj = new SmallestInfiniteSet();
* int param_1 = obj.popSmallest();
* obj.addBack(num);
*/
--既然集合是无限的,可以使用哈希表存放无限集没有的元素,移除无限集存在的元素。
class SmallestInfiniteSet {
HashSet<Integer> set = new HashSet<>();
public SmallestInfiniteSet() {
}
public int popSmallest() {
int num = 1;
while (set.contains(num)) {
num++;
}
set.add(num);
return num;
}
public void addBack(int num) {
if (set.contains(num)){
set.remove(num);
}
}
}
/**
* Your SmallestInfiniteSet object will be instantiated and called as such:
* SmallestInfiniteSet obj = new SmallestInfiniteSet();
* int param_1 = obj.popSmallest();
* obj.addBack(num);
*/