假設有一個集合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(資料結構和演算法)仍然歡迎任何級別的答案,我會努力解釋它:)
uj5u.com熱心網友回復:
每當您聽到“查找缺失的元素”或“查找重復的元素”型別的問題時,您應該立即想到“哈希表”。在互聯網上搜索哈希表,但維基百科文章有基礎知識。
std::unordered_map并且std::unordered_set是 C 中傳統上基于哈希表的集合類。
給定一個集合 U:
unordered_set<int> U = { 1,2,3,4,5,6,7,8,9,10 };
以及作為 U 子集的集合 A:
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;
}
如果您需要對輸出進行排序,請將Bfrom的宣告更改std::unordered_set為 just std::set。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410217.html
標籤:
