![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构和算法
一只特立独行的SB猴子
程序猿暖男一枚。。。
展开
-
给定一个整数数组, 其中2个数出现了奇数次数,其他的数都是偶数词,打印这个数
遍历整个数组,依次做异或运算。由于数组存在两个出现奇数次的整数,所以最终异或的结果,等同于这两个整数的异或结果。这个结果中,至少会有一个二进制位是1(如果都是0,说明两个数相等,和题目不符)。 举个例子,如果最终异或的结果是5,转换成二进制是00000101。此时我们可以选择任意一个是1的二进制位来分析,比如末位。把两个奇数次出现的整数命名为A和B,如果末位是1,说明A和B转为二进制的末位不同,必定其中一个整数的末位是1,另一个整数的末位是0。 根据这个结论,我们可以把原数组按照二进制的末位不同,分成两转载 2020-06-05 22:20:54 · 383 阅读 · 1 评论 -
给定一个整数数组, 其中只有一个数出现了奇数次数,其他的数都是偶数词,打印这个数
直接用异或运算符来进行计算,相同的数字异或为0,0异或任何数都等于任何数,且异或的位置可以进行交换而不影响结果; 异或运算的作用 参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。 即: 0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0 按位异或的3个特点: (1) 0^0=0,0^1=1 0异或任何数=任何数 (2) 1^0=1,1^1=0 1异或任何数-任何数取反 (3) 任何数异或自己=把自己置0 .原创 2020-06-05 22:03:26 · 1499 阅读 · 0 评论