2336. 无限集中的最小数字 --力扣 --JAVA

题目

现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, ...] 。

实现 SmallestInfiniteSet 类:

  • SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。
  • int popSmallest() 移除 并返回该无限集中的最小整数。
  • void addBack(int num) 如果正整数 num  存在于无限集中,则将一个 num 添加 到该无限集中。

解题思路

  1. 正整数是无限的所以,需要存储的时被移除的数据;
  2. 通过使用Map来存储移除的数据;
  3. 移除无限集中的最小整数即Map中不存在的最小整数;
  4. 添加数据到无限集中,即从Map中删除该数据。

代码展示

class SmallestInfiniteSet {
    Map data = null;
    public SmallestInfiniteSet() {
        data = new TreeMap<>();
    }

    public int popSmallest() {
        int index = 1;
        while (index <= data.size()){
            if(!data.containsKey(index)){
                break;
            }
            index++;
        }
        data.put(index, index);
        return index;
    }

    public void addBack(int num) {
        data.remove(num);
    }
}

你可能感兴趣的:(力扣练习,算法,数据结构)