2021/4/30 数组中只出现一次的数(其它数出现k次)

数组中只出现一次的数(其它数出现k次)

https://www.nowcoder.com/practice/5d3d74c3bf7f4e368e03096bb8857871

题目描述

给定一个整型数组 arr 和一个整数 k(k>1)。
已知 arr 中只有 1 个数出现一次,其他的数都出现 k 次。
请返回只出现了 1 次的数。

示例

输入

[5,4,1,1,5,1,5],3
输出
4

解题思路

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

Java代码实现

public int foundOnceNumber (int[] arr, int k) {
        int[] count = new int[32];    // Java 中,int 有 32 位
        for (int i = 0; i < arr.length; ++i) {    // 将所有数的对应二进制位进行求和
            for (int j = 0; j < 32; ++j) {
                count[j] += arr[i] & 1;
                arr[i] >>>= 1;
            }
        }

        int res = 0;
        for (int i = 0; i < 32; ++i) {    // 求和之后再取出来,同时要取模操作
            res <<= 1;
            res |= count[31 - i] % k;    // 有 k 个相同的 1, 则 k % k == 0,剩下的就是多出来的那个数
        }


        return res;
    }
全部评论

相关推荐

11-08 13:58
门头沟学院 Java
程序员小白条:竟然是蓝桥杯人才doge,还要花钱申领的offer,这么好的公司哪里去找
点赞 评论 收藏
分享
09-27 00:29
东北大学 Java
伟大的麻辣烫:查看图片
阿里巴巴稳定性 75人发布 投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务