首页 > 解决方案 > 找到唯一的号码

问题描述

我正在尝试搜索一个数组并打印出其中唯一没有一对的数字,因此在本例中为“4”。

结果一直显示为 2,所以即使我觉得我的逻辑是正确的,我肯定忽略了一些东西。

我一直在尝试解决这个问题并一直卡住

提前谢谢了。

这是代码:


int main(){
    int arr[] = {1, 1, 2, 2, 3, 3, 4};
    int n = sizeof(arr)/sizeof(*arr);
    int foundNum = 0;
    int counter = 0;

    while(counter !=n) {
        int i = 0;
        if (arr[i] != arr[i + 1]) {
            foundNum = arr[i];
        } else {
            arr[i] = arr[i+2];
        }
        counter += 1;
    }
    std::cout << foundNum;
    return 0;
}

标签: c++arraysalgorithmlogic

解决方案


如果您确定除唯一数字之外的所有剩余数字都成对出现,则使用XOR操作非常容易。

并且 xor a pair 为 0。因此,如果您遍历整个数组,则 xor 的结果为 0。

与 0 的 XOR 会产生相同的数字本身。因此,当所有数字都通过它们自己的副本取消时,唯一的数字 xor 与结果 0 一起保留作为答案。

代码 :

int main(){
    int arr[] = {1, 1, 2, 2, 3, 3, 4};
    int n = sizeof(arr)/sizeof(*arr), a = 0;
    for ( int i = 0; i < n; i++ ) a = a ^ arr[i];
    std::cout << "Found the lone number : " << a;
    return 0;
}

推荐阅读