我正在研究一个问题,其中给定的数组如下:
“给定一个非空整数数组,每个元素出现三次,只有一个元素出现一次。找到那只。”
例如:
Input: [2,2,3,2]
Output: 3
我试图用位操作来解决这个问题,我在python中的代码如下:
def singleNumber(self, nums):
ans = 0
for i in range(31):
summ = 0
for num in nums:
dig = (num>>i)&1
if dig:
summ += 1
summ = summ%3
if summ:
ans = ans | summ<<i
return ans
我所要做的就是,得到数组中每个数字的最后一位,然后计算得到的数字,然后%3得到剩下的1位,并移动它以得到正确的答案。
这会使具有负输入的测试用例失败,例如:
[-2,-2,1,1,-3,1,-3,-3,-4,-2]
O/P: 2147483644
Expected O/P: -4
然而,当我在Java中做完全相同的事情时,它是有效的!代码如下:
class Solution {
public int singleNumber(int[] nums) {
int ans = 0;
int dig = 0;
for(int i = 0; i <=31; i++){
int sum = 0;
for(int num: nums){
dig = (num>>i)&1;
if(dig!=0){
sum = sum + 1;
}
sum = sum%3;
}
if(sum!= 0){
ans = ans | sum<<i;
}
}
return(ans);
}
}
导致这种差异的python中的位是如何表示的?
有人能告诉我,语言、Python和Java中的位操作有什么不同吗?