136. Single Number
Given a non-empty array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Example 1:
Input: [2,2,1] Output: 1
Example 2:
Input: [4,1,2,1,2] Output: 4
class Solution { public int singleNumber(int[] nums) { int res = 0; for(int i : nums){ res = res ^ i; } return res; } }
class Solution { public int singleNumber(int[] nums) { // int res = 0; // for (int num : nums) res ^= num; // return res; Set<Integer> set = new HashSet<>(); for(int n : nums) { if(set.contains(n)) set.remove(n); else set.add(n); } for(Integer n: set){ return n; } return -1; } }
两种解法,第一种用异或,思路是一个数异或两次等于没有异或。
第二种是用hashset,遇到重复的就删除,最后肯定只剩下一个。
或者hashmap
class Solution { public int singleNumber(int[] nums) { Map<Integer, Integer> map = new HashMap(); for(int i : nums){ int value = map.getOrDefault(i, 0); map.put(i, value + 1); } for(Map.Entry<Integer, Integer> entry : map.entrySet()){ if(entry.getValue() == 1) return entry.getKey(); } return 0; } }