LeetCode136,137寻找只出现一次的数

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---就是我想得到的数;

 

posted @ 2018-05-30 17:11  bwwbww  阅读(153)  评论(1编辑  收藏  举报