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 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,遇到重复的就删除,最后肯定只剩下一个。
原文:https://www.cnblogs.com/wentiliangkaihua/p/10521657.html