1.题目意思:在数组中,只有一个数字只出现了一次 其他的都出现了两次。找出那个只出现一次的数字。
1 //利用位运算 异或 两个相同的数字异或为0 2 public int singleNumber(int[] nums) { 3 int res = 0 ; 4 for (int i = 0; i < nums.length; i++) { 5 res ^=nums[i]; 6 } 7 return res; 8 }
2.题目意思:数组中,每个数字都出现三次 除了只有一个数字只出现了一次。找出那个只出现一次的数字。
1 // 方法1:排序解 2 public static int singleNumber(int[] nums) { 3 Arrays.sort(nums); 4 int res = 0; 5 for (int i = 0; i < nums.length; i += 3) { 6 if (i == nums.length - 1) { 7 res = nums[i]; 8 break; //continue 可以 9 } 10 if (nums[i] == nums[i + 1]) { 11 continue; 12 }else { 13 res = nums[i]; 14 break; 15 } 16 } 17 return res; 18 }
1 //位运算解---没看懂---哪位大佬知道可以在下面告知我--万分感谢!!!! 2 public static int singleNumber1(int[] nums) { 3 int one = 0, two = 0; 4 for (int i : nums) { 5 one = (one ^ i) & ~two;// ~补位运算 6 two = (two ^ i) & ~one; 7 } 8 return one; 9 }
//还有一种思路 : 就是用set集合存储,然后求和,然后乘3,减去原数组的和,在除以2---就是我想得到的数;