我们可以使用位操作找到0是不是在数组中出现奇数次
Posted
技术标签:
【中文标题】我们可以使用位操作找到0是不是在数组中出现奇数次【英文标题】:Can we find if 0 occurs odd number of times in an array using bit manipulation我们可以使用位操作找到0是否在数组中出现奇数次 【发布时间】:2017-12-23 11:28:33 【问题描述】:我知道,对包含其所有元素的整数数组的所有元素进行异或运算,除了出现偶数次的 1 个元素之外,会给出出现奇数次的数字。
示例
1, 1, 2, 2, 3 1 ^ 1 ^ 2 ^ 2 ^ 3 = 3;
^ 是异或
如果出现奇数次的数是0呢? 1, 1, 2, 2, 0
1 ^ 1 ^ 2 ^ 2 ^ 0 = 0 // Both give
1 ^ 1 ^ 2 ^ 2 = 0 // same answer
如何确认0出现奇数次 PS : 更喜欢 C/C++ 中的答案代码
【问题讨论】:
也许您应该花一些时间来了解按位运算符的工作原理?不仅在您选择的语言中(选择一个!C 和 C++ 是两种截然不同的语言),而且在一般情况下。 看来您已经回答了自己的问题。您无法从“0 是唯一的单个数字”中区分“仅对”的 0。因此,您需要第二种方法来找出偶数/奇数个零。扭转局面:不,不仅仅是异或。 最后一个不是“一个包含所有元素的整数数组,除了 1 个元素出现偶数次”。所以毫不奇怪,这个技巧对它没有任何意义。 给定一个实际具有该属性的输入,它适用于 0。 @Someprogrammerdude 嘿,在位运算符中没有 C/C++。两者的语法相同。 【参考方案1】:我们称 N,即数组中的元素数:
如果(N 为偶数)AND(对所有元素进行异或运算 ==0)-> 所有元素出现偶数次 如果(N 为奇数)AND(对所有元素进行异或运算 ==0)-> 您的单个元素为零。这是check if an integer is even or odd in C / C++的方法
【讨论】:
以上是关于我们可以使用位操作找到0是不是在数组中出现奇数次的主要内容,如果未能解决你的问题,请参考以下文章