Java教程

剑指offer 只出现一次的数字Java

本文主要是介绍剑指offer 只出现一次的数字Java,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

力扣题目链接
不知道别的方法怎么样,只能想出HashMap

class Solution {
    public int singleNumber(int[] nums) {
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        for(int num :nums){
            map.put(num,map.getOrDefault(num,0)+1);
        }
        for(Map.Entry<Integer,Integer> entry: map.entrySet()){
            if(entry.getValue().equals(1)){
                return entry.getKey();
            }
        }
        return -1;
    }
}


力扣大佬的代码1ms

class Solution {
    //将整数的各个数位上的加起来,然后对3取余,若结果为0,则待求数字在该位上是0;
    //若结果为1,则待求数字在该位上是1.
    public int singleNumber(int[] nums) {
        //java的int整型为32位
        int[] arr=new int[32];
        for(int num:nums){
            for(int i=0;i<32;i++){
                arr[i]+=(num>>(31-i))&1;
            }
        }
        int res=0;
        for(int i=0;i<32;i++){
            res=(res<<1)+arr[i]%3;
        }
        return res;
    }
}
这篇关于剑指offer 只出现一次的数字Java的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!