1 class SmallestInfiniteSet {
2 private int min; // 最小值
3 private ArrayList<Integer> blackList; // 黑名单
4 public SmallestInfiniteSet() {
5 this.min = 1;
6 this.blackList = new ArrayList<Integer>();
7 }
8
9 // 移除返回无限集中的最小值
10 public int popSmallest() {
11 int res = min;
12 blackList.add(min); //
13 while(blackList.contains(min+1)){
14 min++;
15 }
16 min +=1;
17 return res;
18 }
19
20 public void addBack(int num) {
21 if(num<min){
22 min = num;
23 }
24 if(blackList.contains(num)){
25 // blackList.remove(num);
26 blackList.remove(new Integer(num)); //找到第一次出现的元素并删除
27 }
28 }
29 }
30 /**
31 1、用for循环遍历List删除元素时,需要注意索引会左移的问题。
32 2、List删除元素时,为避免陷阱,建议使用迭代器iterator的remove方式。
33 3、List删除元素时,默认按索引删除,而不是对象删除。
34 */
35 /**
36 * Your SmallestInfiniteSet object will be instantiated and called as such:
37 * SmallestInfiniteSet obj = new SmallestInfiniteSet();
38 * int param_1 = obj.popSmallest();
39 * obj.addBack(num);
40 */