异或运算非独立思考
class Solution {public int singleNumber(int[] nums) {// 思路1:使用哈希表存储每个数字和该数字出现的次数。// 遍历数组即可得到每个数字出现的次数,并更新哈希表,最后遍历哈希表,得到只出现一次的数字。// 思路2:使用集合存储数字。这里集合可以使用List// 遍历数组中的每个数字,如果集合中没有该数字,则将该数字加入集合,如果集合中已经有该数字,则将该数字从集合中删除,最后剩下的数字就是只出现一次的数字。// 但是以上方法时间复杂度均为O(N)// 答案,使用异或运算:任何数和其自身做异或运算,结果是 0// 又因为异或运算满足交换律int sum = 0;for (int num : nums) {sum ^= num;}return sum;// HashMap<Integer, Integer> map = new HashMap(16);// for (int i = 0; i < nums.length; i++) {// if (map.containsKey(nums[i])) {// map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);// } else {// map.put(nums[i], 1);// }// }// for (Integer key : map.keySet()) {// if (map.get(key) == 1) {// return key;// }// }// return 0;}}
class Solution {public int singleNumber(int[] nums) {HashMap<Integer,Integer> map = new HashMap<>();for (Integer num : nums) {if (map.get(num)!=null){map.remove(num);}else {map.put(num,1);}}return map.keySet().iterator().next();}}
class Solution {public int singleNumber(int[] nums) {HashSet<Integer> set = new HashSet<>();int arraySum = 0;int setSum = 0;for (int num : nums) {set.add(num);arraySum += num;}for (Integer integer : set) {setSum += integer;}return setSum * 2 - arraySum;}}
