Swift-限制空间去重

作者: FlyElephant | 来源:发表于2017-06-09 09:38 被阅读25次

题目:给定一个数组,包含1到N的整数,N最大为32000,数组可能含有重复的值,且N的取值不定. 若只有4KB内存可用,该如何打印数组中所有重复的元素.

限制空间为4KB,最多有8 * 4 * 1024个比特位可以用,大于32000,可以创建32000个位向量实现.

核心代码:
<pre><code>`class BitSet {

var bitSet:[Int]?

init(size:Int) {
    bitSet = [Int].init(repeating: 0, count: size >> 5) // 除以32
}

func get(pos:Int) -> Bool {
    let num:Int = pos >> 5 // 除以32
    let bitNubmer:Int = pos & 0x1F // 除以32取余
    return (bitSet![num] & (1 << bitNubmer)) != 0
}

func set(pos:Int) {
    let num:Int = pos >> 5 // 除以32
    let bitNumber:Int = pos & 0x1F //除以32取余
    bitSet![num] = bitSet![num] | (1 << bitNumber)
}

}`</code></pre>

<pre><code>` func checkDuplicates(arr:[Int]) {

    let bitSet:BitSet = BitSet(size: 32000)
    
    for i in 0..<arr.count {
        
        let num = arr[i]
        let num0 = num - 1
        
        if bitSet.get(pos: num0) {
            print("FlyElephant---重复数据:\(num)")
        } else {
            bitSet.set(pos: num0)
        }
    }
}`</code></pre>

测试代码:
<pre><code>var checkData:[Int] = [1, 2, 24, 800 ,10, 20, 800, 2, 9] bitManager.checkDuplicates(arr: checkData)</code></pre>

FlyElephant.png

相关文章

  • Swift-限制空间去重

    题目:给定一个数组,包含1到N的整数,N最大为32000,数组可能含有重复的值,且N的取值不定. 若只有4KB内存...

  • Swift-字符串去重

    题目:删除字符串中重复出现的字符,输入“FlyElephant”,返回“FlyEephant”.核心代码: ` ...

  • swift-命名空间

    1.定义命名空间 1.1 定义公式 需要什么样的命名空间,就把其中的rx改成你希望的名字。 1.2 具体实例 2....

  • 删除链表中重复的结点

    时间限制:1秒 空间限制:32768K 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重...

  • swift-类属性

    了解属性之前,需要先了解前面的swift-类结构内容 - swift-类结构源码探寻[https://www.ji...

  • 国内免费的GIT仓库

    阿里云 代码空间:不限制,超过5G需要申请增加空间 限制:无 码云 代码空间:5G 限制:3人及以下,升级要收费 ...

  • 空间是限制

    (十一) 眼看就是下午2点半了,简妮不想去赴约,孩子怎么安置?把一个十岁的孩子一个人丢在家里吗?更何...

  • Swift4.0 --- 第一节:变量和常量

    // // ViewControllerOne.swift // Swift-(1) // // Created ...

  • Swift4.0 --- 可选项

    // // ViewControllerTwo.swift // Swift-(1) // // Created ...

  • SQL必知必会

    检索数据 搜索并去重【DISTINCT】: 限制结果【LIMIT】: LIMIT指定返回的行数: OFFSET指定...

网友评论

  • Hengry:大神:bitSet![num] = bitSet![num] | (1 << bitNumber) 这怎么理解呢?
    FlyElephant:@DevHank 不好意思,是或运算
    Hengry:@FlyElephant 是或运算吧
    FlyElephant:先取出当前的数字,然后将1左移bitNumber位之后,做与运算~

本文标题:Swift-限制空间去重

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