【发布时间】:2022-01-16 23:28:27
【问题描述】:
给定两个数组,第一个有“n”个数字,第二个有“n-m”个数字;第二个数组与第一个数组的顺序不同。如果有多个具有相同值的数字,则它们以原始数组中的位置顺序结束。此外,第二个数组中的所有值也在第一个数组中找到。我必须按照它们在第一个数组中出现的顺序来查找“m”缺失的数字。
input:
7 3
12 34 45 29 100 87 32
100 87 12 34
output:
45 29 32
#include <iostream>
using namespace std;
int main()
{
int n, missing_number = 0, m, i, j, v[1201], w[1201];
cin >> n >> m;
for (i = 0; i < n; ++i) {
cin >> v[i];
}
for (i = 0; i < n - m; ++i) {
cin >> w[i];
}
for (i = 0; i < n; ++i) {
missing_number = 1;
for (j = 0; j < n - m; ++j) {
if (v[i] == w[j]) {
missing_number = -1;
}
}
if (missing_number == 1) {
cout << v[i] << " ";
}
}
if (m == 0)
cout << "there are no missing numbers";
return 0;
}
我的代码不适用于重复数字,例如:
7 3
2 6 1 9 3 2 4
4 1 2 3
我的输出应该在哪里:
6 9 2
【问题讨论】:
-
请同时包含您的代码产生的错误输出。
-
...另外,你有没有进行任何错误搜索?如果您有任何信息,我们可以使用该信息...
-
你有没有一次输入一个数字来调试你的算法?
-
有了
std::unordered_map,你可以把你的O(n²)算法变成O(n)
标签: c++ arrays for-loop numbers