class Solution {
public int singleNumber(int[] nums) {
int ans = 0;
for(int num : nums){
ans ^= num;
}
return ans;
}
}
一个数组中,只有两个数,出现了奇数次,找出它们
public class Code01_OddTimesNumber {
//一个数组中,只有两个数,出现了奇数次,找出它们
public static void printOddTimesNumber(int[] nums){
//eor 所有异或结果
//eor = 两个数之一a ^ 两个数之一b
int eor = 0;
for(int num : nums){
eor ^= num;
}
//找到eor中最右边的1,两数肯定在这一位不同,
//在这一位为0,为1,将所有数分成两部分,两数分别在两部分
// eor 00100100
// flag 00000100
int flag = eor & (-eor);
//找出一个数,起名left
int left = 0;
for(int num : nums){
if((num & flag) == 0){
left ^= num;
}
}
System.out.println("一个数是:" + left);
System.out.println("另一个数是:" + (left^eor));
}
public static void main(String[] args) {
// 2 5 7
// 后两个出现奇数次
int[] nums = {2,2,5,2,5,2,5,7};
for(int i = 0; i < nums.length; i++){
System.out.print(nums[i] + " ");
}
printOddTimesNumber(nums);
}
}
```### 交换两个变量,不申请新的变量
![在这里插入图片描述](https://img-blog.csdnimg.cn/e073a64525ec4d5b8676c128e328c34d.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9beace6bf81a44d69942488de9090be1.png#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/de6ecb5729ca4e87a9b1f595e37f6559.png#pic_center)