美文网首页
leetcode-136. 只出现一次的数字

leetcode-136. 只出现一次的数字

作者: 雪落无声听雨声 | 来源:发表于2020-08-07 10:25 被阅读0次

    背景

    image.png

    解决方案

    第一种解法 使用hashmap

    class Solution {
        public int singleNumber(int[] nums) {
            HashMap<Integer,Integer> map = new HashMap<>();
            for(int i=0;i<nums.length;i++){
                if(map.get(nums[i])==null){
                    map.put(nums[i],1);
                }else {
                    int mid = map.get(nums[i]);
                    map.put(nums[i],mid+1);
                }
            }
    
            int count  = 0 ;
            int result = -1;
            for(Integer key: map.keySet() ){
                if(map.get(key)==1){
                    count++;
                    result = key;
                }
            }
    
            if(count==1){
                return result;
            }else{
                return -1;
            }
        }
    }
    
    image.png

    第二种解法 位运算 使用异或

    既满足时间复杂度又满足空间复杂度,就要提到位运算中的异或运算 XOR,主要因为异或运算有以下几个特点:
    一个数和 0 做 XOR 运算等于本身:a⊕0 = a
    一个数和其本身做 XOR 运算等于 0:a⊕a = 0
    XOR 运算满足交换律和结合律:a⊕b⊕a = (a⊕a)⊕b = 0⊕b = b

    class Solution {
        public int singleNumber(int[] nums) {
    
            int temp = 0;
            for(int data:nums){
                temp = temp^data;
            }
            return temp;
        }
    }
    
    image.png

    相关文章

      网友评论

          本文标题:leetcode-136. 只出现一次的数字

          本文链接:https://www.haomeiwen.com/subject/kexfdktx.html