在这个数组中找到重复的数字,我在这里做错了什么?
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 次,你可以使它更聪明。
我想在这个数组中找到重复的数字,我正在使用向量并想打印答案,我在这里做错了什么?
#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 次,你可以使它更聪明。