LeetCode 刷题【136. 只出现一次的数字、137. 只出现一次的数字 II】
136. 只出现一次的数字

自己做

解1:排序
class Solution {public int singleNumber(int[] nums) {Arrays.sort(nums);int i = 0;int j = 1;int z = 2;while(z < nums.length){if(nums[j] != nums[i] && nums[j] != nums[z])return nums[j];i = j;j = z;z++;}//最后一个元素是单独元素if(j < nums.length && nums[j] != nums[i])return nums[j];//第一个元素的单独元素return nums[0];}
}

解2:哈希表
class Solution {public int singleNumber(int[] nums) {Map<Integer, Integer> m = new HashMap();for(int i = 0; i < nums.length; i++)if(!m.containsKey(nums[i]))m.put(nums[i], 1);else{int num = m.get(nums[i]);// System.out.println(num);if(num == 1)m.remove(nums[i]);elsem.put(nums[i], num + 1);}Map.Entry<Integer, Integer> firstEntry = m.entrySet().iterator().next();return firstEntry.getKey();}
}

看题解
官方题解

class Solution {public int singleNumber(int[] nums) {int single = 0;for (int num : nums) {single ^= num;}return single;}
}
137. 只出现一次的数字 II

自己做

解:哈希表
class Solution {public int singleNumber(int[] nums) {Map<Integer, Integer> m = new HashMap();for(int i = 0; i < nums.length; i++)if(!m.containsKey(nums[i]))m.put(nums[i], 1);else{int num = m.get(nums[i]);// System.out.println(num);if(num == 2)m.remove(nums[i]);elsem.put(nums[i], num + 1);}Map.Entry<Integer, Integer> firstEntry = m.entrySet().iterator().next();return firstEntry.getKey();}
}

看题解
官方题解

class Solution {public int singleNumber(int[] nums) {int ans = 0;for (int i = 0; i < 32; ++i) {int total = 0;for (int num: nums) {total += ((num >> i) & 1);}if (total % 3 != 0) {ans |= (1 << i);}}return ans;}
}
