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

简介: 现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, ...] 。实现 SmallestInfiniteSet 类:SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。int popSmallest() 移除 并返回该无限集中的最小整数。void addBack(int num) 如果正整数 num 不 存在于无限集中,则将一个 num 添加 到该无限集中。

 题目

现有一个包含所有正整数的集合 [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<Integer,Integer> 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);
          }
      }

      image.gif


      目录
      相关文章
      |
      22天前
      |
      算法 Java
      LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
      LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
      33 6
      |
      22天前
      |
      存储 算法 Java
      LeetCode经典算法题:打家劫舍java详解
      LeetCode经典算法题:打家劫舍java详解
      37 2
      |
      22天前
      |
      人工智能 算法 Java
      LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
      LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
      33 1
      |
      22天前
      |
      存储 算法 Java
      LeetCode经典算法题:预测赢家+香槟塔java解法
      LeetCode经典算法题:预测赢家+香槟塔java解法
      30 1
      |
      22天前
      |
      存储 算法 Java
      LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
      LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
      44 0
      |
      22天前
      |
      算法 Java
      LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
      LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
      34 0
      |
      22天前
      |
      存储 算法 Java
      LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
      LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
      14 0
      |
      22天前
      |
      算法 Java 索引
      LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
      LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
      26 0
      |
      22天前
      |
      存储 算法 Java
      LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
      LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
      15 0
      |
      3月前
      |
      算法 Java
      [Java·算法·简单] LeetCode 283. 移动零
      [Java·算法·简单] LeetCode 283. 移动零
      34 2
      下一篇
      云函数