I. 数组中数字出现的次数
解法一: 哈希表
public int[] singleNumbers(int[] nums) { int[] ans = new int[2]; Map<Integer,Boolean> map = new HashMap<>(); for(int i = 0 ; i < nums.length ; i++) { if(!map.containsKey(nums[i])) { map.put(nums[i],true); } else { map.put(nums[i],false); } } int index = 0 ; for(int i = 0 ; i < nums.length ; i++) { if(map.get(nums[i])) { ans[index] = nums[i]; index++; } } return ans; }
解法二:利用异或
public int[] singleNumbers(int[] nums) { int tmp = nums[0]; for(int i = 1 ; i < nums.length ; i++) { tmp ^= nums[i]; } int divide = lowbit(tmp); int ans1 = 0 , ans2 = 0; for(int i = 0 ; i < nums.length ; i++) { if((nums[i]÷) == 0) { ans1 ^= nums[i]; } else { ans2 ^= nums[i]; } } int[] ans = new int[]{ans1,ans2}; return ans; } public int lowbit(int n) { return n & (-n); }
II. 数组中数字出现的次数 II
解法一:HashMap
public int singleNumber(int[] nums) { Map<Integer,Boolean> map = new HashMap<>(); for(int i = 0 ; i < nums.length ; i++) { if(!map.containsKey(nums[i])) { map.put(nums[i],true); } else { map.put(nums[i] , false); } } for(int i = 0 ; i < nums.length ; i++) { if(map.get(nums[i])) { return nums[i]; } } return -1; }