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;
    }
}

 

posted @ 2019-03-13 10:55  Schwifty  阅读(108)  评论(0编辑  收藏  举报