我正在尝试在两个数组之间打印非常见元素。例如, 如果array1 = {1,3,5}并且array2 = {1,2,4,5},我的输出应为{2,3,4}。
我在这里尝试了一些东西。但它只打印3个。 我做错了什么?
#include<iostream>
using namespace std;
int main()
{
int a[] = { 1, 3, 5 };
int b[] = { 1, 2, 4, 5 };
bool contains = false;
int result[10];
int r = 0;
int x;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
if (a[i] == b[j]) {
contains = true;
break;
}
}
if (!contains) {
result[r]=a[i];
++r;
}
else{
contains = false;
}
}
for (x = 0; x < r; x++)
{
cout<< result[x]<<"\n";
}
return 0;
}
答案 0 :(得分:5)
您没有将b
中的唯一值添加到result
。但这是c ++。我建议您使用std::vector
,std::sort
,std::set_symmetric_difference
和std::back_inserter
。
#include <iostream> // std::cout
#include <algorithm> // std::set_symmetric_difference, std::sort
#include <iterator> // std::back_inserter
#include <vector> // std::vector
int main()
{
std::vector< int > a = { 1, 3, 5 };
std::vector< int > b = { 1, 2, 4, 5 };
std::sort( a.begin(), a.end() );
std::sort( b.begin(), b.end() );
std::vector< int > result;
std::set_symmetric_difference( a.begin(), a.end(), b.begin(), b.end(), std::back_inserter(result) );
for ( int x : result )
std::cout << x << "\n";
return 0;
}
正如@ChristianHackl在下面的评论中所建议的那样,也可以使用a
和b
的数组并使用独立函数std::begin
和std::end
:
#include <iostream> // std::cout
#include <algorithm> // std::set_symmetric_difference, std::sort
#include <iterator> // std::back_inserter
#include <vector> // std::vector, std::begin, std::end
int main()
{
int a[]{ 1, 3, 5 };
int b[]{ 1, 2, 4, 5 };
std::sort( std::begin(a), std::end(a) );
std::sort( std::begin(b), std::end(b) );
std::vector< int > result;
std::set_symmetric_difference( std::begin(a), std::end(a), std::begin(b), std::end(b), std::back_inserter(result) );
for ( int x : result )
std::cout << x << "\n";
return 0;
}
答案 1 :(得分:3)
您添加了所有&#34; unique&#34;从a
到result
的值,但您忘记将b
中的所有值添加到result
。
修改强>
类似的东西:
for (int i=0; i < sizeof(b)/sizeof(int); ++i, ++r)
{
result[r] = b[i];
}
答案 2 :(得分:0)
你的算法在这里是错误的。首先,你的代码在o(a * b)中运行,其中a和b是列表长度。
此外,它只生成A中但不包含在B中的元素。
这样做的方法是对两个列表进行排序,然后浏览A和B,移动到最小的当前元素,如果当前元素不同,则将其添加到结果中。
这将在o(log a + log b + a + b)中运行。