美文网首页
位运算算法2

位运算算法2

作者: 点滴86 | 来源:发表于2022-08-11 14:42 被阅读0次

1、很多成对出现的正整数保存在磁盘文件中,注意成对的数字不一定是相邻的,如2,3,4,3,4,2...,由于意外有一个数字消失了,如何尽快找到是哪个数字消失了?
思路:考虑“异或”做操的定义,档两个操作数的对应位不相同时,该数的对应位就为1。也就是说如果是相等的两个数“异或”,得到的结果为0,而0与任何数字“异或”,得到的是哪个数字本身。所以我们考虑将所有的数字做“异或”操作,因为只有一个数字消失,那么其他两两出现的数字“异或”后为0,0与仅有的一个数字做“异或”,我们就得到了消失的数字是哪个。

func findLostNum(nums: [UInt]) -> UInt {
    var lostNum: UInt = 0
    for num in nums {
        lostNum = lostNum ^ num
    }
    
    return lostNum
}

2、如果有两个数字意外丢失了(丢失的不是相等的数字),该如何找到丢失的两个数字?
思路:设题目中这两个只出现1次的数字分别为A和B,如果将A,B分开到两个数组中,那显然符合“异或”解法的关键点了。因此这个题目的关键点就是将A,B分开到两个数组中。由于A,B肯定是不相等的。因此在二进制上必定至少有一位是不同的。根据这一位是0还是1可以将A和B分开到A组和B组。而这个数组中其他数字要么属于A组,要么就属于B组。再对A组和B组分别执行“异或”解法就可以得到A,B了。而要判断A,B在那一位上不相同,只要根据"A异或B"的结果就可以知道了,这个结果在二进制上为1的位都说明A,B在这一位上是不相同的。

  func findTwoLostNum(nums: [UInt]) -> (UInt, UInt) {
    var lostNum1: UInt = 0
    var lostNum2: UInt = 0
    
    /// 计算两个数的异或结果
    var tmp: UInt = 0
    for num in nums {
        tmp = tmp ^ num
    }
    
    /// 找到第一个为1的位
    var flag: UInt = 1
    while (tmp & flag) == 0 {
        flag = flag << 1
    }
    
    /// 找两个丢失的数字
    for num in nums {
        if (num & flag == 0) {
            lostNum1 = lostNum1 ^ num
        } else {
            lostNum2 = lostNum2 ^ num
        }
    }
    
    return (lostNum1, lostNum2)
}

相关文章

  • 递归、回溯、分治

    递归 (1)子集 方式一:递归算法 方式二:位运算算法 (2)子集II 方法一:递归算法 方法二:位运算 (3)组...

  • 位运算算法2

    1、很多成对出现的正整数保存在磁盘文件中,注意成对的数字不一定是相邻的,如2,3,4,3,4,2...,由于意外有...

  • 位运算 算法

    位运算 算法 -1.与: &或: |非: !异或 : ^ 相同为 0, 不同为 1int 32 位 -> int ...

  • 2.(位、双指针、离散化、区间合并)

    1 .位运算 2. 双指针算法 3. 离散化 4. 区间合并

  • 2018-06-07

    算法笔记 1 大O算法 1:O(运算次数):表示运算最糟糕情况下 运算时间,表示算法时间的增速 2数组链表 在链表...

  • 算法

    算法实战 | 图像处理, 宽度优先搜索, 位运算

  • 算法位运算总结

    在位运算之前,对二进制需要掌握的基础知识 正数的二进制,例如 5原码是 0000 0000 0000 0000 0...

  • 位运算小算法

    判断一个数是不是2的N次幂(能被2整除)swift篇 按照二进制中只有一个1的时候才是2的N次幂,例如000000...

  • 算法很美--位运算

    2019/3/22更新 题目1 : Exam07_TwoSingleNumbers时间限制:2000ms单点时限:...

  • 算法总结-位运算

    位运算符用于二进制运算 与运算 & 二进制数 n & 1 的结果为n的末位 异或运算 ^ 长度为 L 的二进制数 ...

网友评论

      本文标题:位运算算法2

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