我是靠谱客的博主 苗条超短裙,最近开发中收集的这篇文章主要介绍数组中只出现一次的数(其它数出现k次),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目描述
给定一个整型数组 arr 和一个整数 k(k>1)k(k>1)。已知 arrarr 中只有 1 个数出现一次,其他的数都出现 k 次。请返回只出现了 1 次的数。
示例1
输入 [5,4,1,1,5,1,5],3
返回值 4

题解:最初看题觉得很类似与之前的几道位运算题目,写了一波代码发现忽略了一个问题,数组中唯一只出现一次的数字这道题目针对的范围比较局限,只能针对其余数字出现3次来求解,如果出现是奇数次(比如大于3的奇数)该题目的解法需要变换了。
这道题是leecode 136 和 leecode 137 这两道题目的综合版本。
将每个数字转化为二进制表示,对于二进制的每一位,如果每一位为1 的个数可以整除k,那么表示要求的结果中该位为0,反之该位为1。最外层循环表示的是该求解第几位上的1的个数,第0位表示二进制中的最低位,通过右移操作 和 与 操作求解所有数字在该位上为1的和,在还原要求解的数字时需要使用左移操作来还原,不管是余数为0还是余数为1。

class Solution {
public:
    int foundOnceNumber(vector<int>& arr, int k) {
        // write code here
        int res=0;
        for(int i=0;i<32;i++)
        {
            int sum=0;
            for(auto x:arr)
            {
                sum+=x>>i&1;
            }
            res+=(sum%k)<<i;
        }
        return res;
    }
};

最后

以上就是苗条超短裙为你收集整理的数组中只出现一次的数(其它数出现k次)的全部内容,希望文章能够帮你解决数组中只出现一次的数(其它数出现k次)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部