leetcode-只出现一次的数字

基本思路

利用hash表存出现的次数,这样占用的空间大


class Solution {
    public int singleNumber(int[] nums) {
        HashMap<Integer,Integer> map = new HashMap<>();
        for(int i = 0;i<nums.length;i++){
            if(!map.containsKey(nums[i])){
                map.put(nums[i],1);
            }else{
                map.put(nums[i],2);
            }
        }
        for(Integer i:map.keySet()){
            if(map.get(i)==1){
                return i;
            }
        }
        return 0;
    }
}

网上思路

利用异或,当两个数相同时异或结果为0,一个数与0异或结果为该数,那么遍历一边数组,每个数字都异或,出现两次的数字抵消为0,结果就是剩下的出现一次的数字


class Solution {
    public int singleNumber(int[] nums) {
        int ans = nums[0];
        if (nums.length > 1) {
           for (int i = 1; i < nums.length; i++) {
              ans = ans ^ nums[i];
           }
         }
         return ans;
    }
}



posted @ 2021-12-03 20:58  Nevesettle  阅读(35)  评论(0编辑  收藏  举报