2021/4/30 只出现一次的数字 II

题目描述

描述转载自力扣《137. 只出现一次的数字 II》

给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

示例1

输入:nums = [2,2,3,2]
输出:3

示例2

输入:nums = [0,1,0,1,0,1,99]
输出:99

解题思路

  1. 将所有数字的二进制对应位置进行求和,用过 Excel 的胖友应该都知道求和操作,如图
    图片说明
  2. 因为有 3 个数是重复的,所有把所有二进制位求和之后得到的数值进行取模操作,如图
    图片说明
    于是就得到了结果。

Java代码实现

class Solution {
    public int singleNumber(int[] nums) {
        int[] count = new int[32];
        for (int i = 0; i < nums.length; ++i) {
            for (int j = 0; j < 32; ++j) {
                count[j] += nums[i] & 1;
                nums[i] >>>= 1;
            }
        }

        int res = 0;
        for (int i = 0; i < 32; ++i) {
            res <<= 1;
            res |= count[31 - i] % 3;
        }


        return res;
    }
}
全部评论

相关推荐

Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
06-26 15:33
青岛工学院 Java
积极的秋田犬要冲国企:他现在邀请我明天面试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务