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

背景

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容