2023-11-29(无限集中的小数)
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();