在这个数组中找到重复的数字,我在这里做错了什么?

Find the duplicate numbers in this array,what i'm i doing wrong here?

我想在这个数组中找到重复的数字,我正在使用向量并想打印答案,我在这里做错了什么?

#include <iostream>
#include <vector>
using namespace std;

int findDuplicate(vector<int> &arr)
{
    int ans = 0;
    // XOR all elements
    for (int i = 0; i < arr.size(); i++)
    {
        ans = ans ^ arr[i];
    }

    // XOR [1, n-1]
    for (int i = 1; i < arr.size(); i++)
    {
        ans = ans ^ i;
    }
    cout << ans;
    return ans;
}
int main()
{
    vector<int> arr = {5, 2, 5, 2, 7, 6, 6};
    findDuplicate(arr);
}

有很多地方是错误的。让我们从两个简单的开始吧。

你有一个打印(结果)0 的 cout 语句。但是你没有执行 endl,所以你没有得到换行符。

cout << ans << endl;

这实际上会打印一个换行符,这样更容易阅读。

其次,您的方法 returns 一个值,在 main() 中被忽略。您可能想在 main:

中执行此操作
int answer = findDuplicate(arr);
cout << "And the answer is " << answer << endl;

或者类似的东西。

一切都很好。这是简单的事情。但是为什么你认为这个 XOR 代码会告诉你它们是什么重复项,尤其是当可能有多个相同值或多个值具有重复项时。也许您知道我们 none 中的一些算法。

但是当数据明显有重复时它打印出 0。

我所知道的每个重复查找器都非常有效地对数据进行排序,然后循环遍历它,跟踪最后一个值,如果下一个值等于前一个值,则您有一个重复项。

#include <algorithm>

std::sort(vec.begin(), vec.end());
int prevValue = vec[0];
for (int index = 1; index < vec.size(); ++index) {
    int thisValue = vec[index];
    if (thisValue == prevValue) {
        ... Print it
    }
    prevValue = thisValue;
}

如果你想知道有多少重复,并且想聪明地不打印 6 连续重复 17 次,你可以使它更聪明。