C语言数组中仅有两个数字各出现一次
发布时间
阅读量:
阅读量
题目描述
新:在一个数组中仅有两个数值仅出现一次,在其余数值均出现了两次的情况下,请设计一个函数以确定并返回这两个仅出现一次的数值。
1.首先,我们一定觉得很耳熟,我们曾经应该做过这样一个题目
对于一个数组来说,在这种情况下仅有一个元素恰好出现了1次而其他的元素则均出现了2次我们的目标是找出那个恰好出现了一次的数值
我们在复习旧题的过程中应用了整体异或的方法。其最终实现效果即是我们所寻找的目标数值(原因如下:相同数值进行异或运算会得到零;零与任何数值进行异或运算则会返回该数值本身)。
其次,在探讨我们的新问题时,在将这个数组整体进行异或操作后,则必然能够得出三个结论。
- 结果必定不等于零;
- 其值必然等于这两个仅在各自位置上出现一次的数字进行异或运算的结果;
- 若将结果视为由32个二进制位组成的数值,则至少有一个二进制位为1。
随后我们可以利用按位与运算来确定该比特位处于1的状态。基于该比特位的位置信息我们可以将整个数组进行分割并分为两个部分这两个部分必具备以下两个特征
- 不同的两个数值必然分配到不同的组别中
- 相同的数值必然被分配到同一个集合中,并无需关注具体位置
最后一点依据就是——基于上述两个特性,在原有数组的基础上我们进行了分类处理,并将其分为了两组新的数组。它们各自具有这样的性质:每
全部评论 (0)
还没有任何评论哟~
