Я работаю над проблемой, в которой указанный массив выглядит следующим образом:
"При наличии непустого массива целых чисел каждый элемент появляется три раза, кроме одного, который появляется ровно один раз. Найдите, чтоодин. "
Например:
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?