美文网首页
2023-11-29(无限集中的小数)

2023-11-29(无限集中的小数)

作者: lotawei | 来源:发表于2023-11-29 14:16 被阅读0次

    11/30
    //import Foundation
    //
    //现有一个包含所有正整数的集合 [1, 2, 3, 4, 5, ...] 。
    //
    //实现 SmallestInfiniteSet 类:
    //
    //SmallestInfiniteSet() 初始化 SmallestInfiniteSet 对象以包含 所有 正整数。
    //int popSmallest() 移除 并返回该无限集中的最小整数。
    //void addBack(int num) 如果正整数 num 不 存在于无限集中,则将一个 num 添加 到该无限集中。
    //
    //
    //示例:
    //
    //输入
    //["SmallestInfiniteSet", "addBack", "popSmallest", "popSmallest", "popSmallest", "addBack", "popSmallest", "popSmallest", "popSmallest"]
    //[[], [2], [], [], [], [1], [], [], []]
    //输出
    //[null, null, 1, 2, 3, null, 1, 4, 5]
    //
    //解释
    //SmallestInfiniteSet smallestInfiniteSet = new SmallestInfiniteSet();
    //smallestInfiniteSet.addBack(2); // 2 已经在集合中,所以不做任何变更。
    //smallestInfiniteSet.popSmallest(); // 返回 1 ,因为 1 是最小的整数,并将其从集合中移除。
    //smallestInfiniteSet.popSmallest(); // 返回 2 ,并将其从集合中移除。
    //smallestInfiniteSet.popSmallest(); // 返回 3 ,并将其从集合中移除。
    //smallestInfiniteSet.addBack(1); // 将 1 添加到该集合中。
    //smallestInfiniteSet.popSmallest(); // 返回 1 ,因为 1 在上一步中被添加到集合中,
    // // 且 1 是最小的整数,并将其从集合中移除。
    //smallestInfiniteSet.popSmallest(); // 返回 4 ,并将其从集合中移除。
    //smallestInfiniteSet.popSmallest(); // 返回 5 ,并将其从集合中移除。
    //
    //
    //提示:
    //
    //1 <= num <= 1000
    //最多调用 popSmallest 和 addBack 方法 共计 1000 次
    //思路: 固定了正整数数组
    //开始想复杂了 set集合中去对原有数组进行增删 计数 发现不容易控制迭代器导致代码不太清晰 后来一想 hash就可以解决 根本无需进行增删操作 只需标记 num是 在与否
    //可以使用hash的方式记录
    public class SmallestInfiniteSet {
    var hashRecord = Int:Int
    init() {
    for i in 1...1000 {
    hashRecord[i] = 1
    }
    }

    func popSmallest() -> Int {
        var  res = 1
        for i in 1...1000 {
            if hashRecord[i] == 1{
                hashRecord[i] = 0
                return  i
            }
        }
        return 0;
    }
    
    func addBack(_ num: Int) {
        if (hashRecord[num] == 0) {
            hashRecord[num] = 1;
        }
    }
    

    }
    let smallestInfiniteSet = SmallestInfiniteSet();
    smallestInfiniteSet.addBack(2); // 2 已经在集合中,所以不做任何变更。
    smallestInfiniteSet.popSmallest(); // 返回 1 ,因为 1 是最小的整数,并将其从集合中移除。
    smallestInfiniteSet.popSmallest(); // 返回 2 ,并将其从集合中移除。
    smallestInfiniteSet.popSmallest(); // 返回 3 ,并将其从集合中移除。
    smallestInfiniteSet.addBack(1); // 将 1 添加到该集合中。
    smallestInfiniteSet.popSmallest(); // 返回 1 ,因为 1 在上一步中被添加到集合中,
    // 且 1 是最小的整数,并将其从集合中移除。
    smallestInfiniteSet.popSmallest(); // 返回 4 ,并将其从集合中移除。
    smallestInfiniteSet.popSmallest();

    相关文章

      网友评论

          本文标题:2023-11-29(无限集中的小数)

          本文链接:https://www.haomeiwen.com/subject/jtlxgdtx.html