概述
题目描述
给定一个整型数组 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次)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复