假设有一个集合 U = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 我创建了一个 C++ 程序,然后使用一些逻辑打印了数字 { 1, 3, 6, 7, 9}(我们称之为集合 A),所以剩下的数字是 {2, 4, 5, 8, 1}(我们称之为集合 B)
和 U = A + B
有没有直接打印出B组数字(B = U - A)? (实际上并没有颠倒我打印 A 组数字的逻辑)
就像如果我打印偶数,那么剩下的就是奇数,我可以轻松地编码来显示奇数。但我想问是否还有另一种“直接”的方法?
同样,如果我打印了从 1 到 100 的所有质数,那么我可以反转逻辑并打印未打印的数字(这里不是质数),但我不是要求这样做,我要求的是有没有直接打印剩余一组数字的方法?
PS:我只知道基础的C++,我还没有开始DSA(数据结构和算法),仍然欢迎任何水平的答案,我会努力解释它:)
每当您听到“查找丢失的元素”或“查找重复的元素”类型的问题时,您应该立即想到“哈希表”。在互联网上搜索哈希表,但维基百科文章有基础知识。
std::unordered_map
和 std::unordered_set
是 C++ 中的集合类,传统上基于哈希表。
给定一组 U:
unordered_set<int> U = { 1,2,3,4,5,6,7,8,9,10 };
集合 A 是 U 的子集:
unordered_set<int> A = { 1,3,5,7,9 };
那么
B = U - A
可以计算为
unordered_set<int> B;
for (int u : U) // for each item u in set U
{
if (A.find(u) == A.end()) // if u is not in "A"
{
B.insert(u); // add it to "B".
}
}
for (int b : B)
{
cout << b << endl;
}
如果需要对输出进行排序,请将
B
的声明从 std::unordered_set
更改为 std::set
。
wps huine kazkokia nesuprantu karocia