栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【剑指Offer(专项突破)】004. 只出现一次的数字(Java实现) 详细解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【剑指Offer(专项突破)】004. 只出现一次的数字(Java实现) 详细解析

题目:

输入一个整数数组,数组中只有一个数字出现了一次,而其他数字都出现了3次。请找出那个只一次的数字。例如,如果输入的数组为[0,1,0,1,0,1,100],则只出现一次的数字是100。

Leetcode题目连接:

https://leetcode.cn/problems/WGki4K/

分析:

所有数字都出现3次那么所有数字的和相加除3余数应为0,类推过来,一个int型整数由32个0/1组成,将所有出现的数字按位数相加,例如所有数字第i个位和为bitsum[i],那么那些出现三次的数字的第i个位和除3应该为0,若除3为0,那么只出现一次的数字的第i个位为0,若除3为1,那么只出现一次的数字的第i个位为1。

Java代码实现:
class Solution {
    public int singleNumber(int[] nums) {
        int[] bitSums = new int[32]; //定义一个数组为所有数字在第i位置的和
        for(int num: nums){
            for(int i = 0; i <32; i++){
                bitSums[i] += (num>>(31-i)) & 1;//num>>31-i让i位置的数为末尾数,与i位与计算得到i位置的值
            }
        }
        int result = 0;
        for(int i = 0; i<32; i++){
            result = (result<<1) + bitSums[i]%3;//result>>1让末尾数进一个位,腾出最后一位给bitSums[i]%3
        }
    return result;         
    }
}

复杂度分析:

时间复杂度:O(n^2)

代码执行结果:

 

以上为个人做题笔记,很多是自己的理解,若有错误还请各位大佬指出~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1005909.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号