2
A
回答
6
您可以使用:std::set_intersection
爲,只要你第一個兩個列表進行排序:
例子:
#include <algorithm>
#include <iostream>
#include <list>
int main() {
std::list<int> list1{2, 5, 7, 8, -3, 7};
std::list<int> list2{9, 1, 6, 3, 5, 2, 11, 0};
list1.sort();
list2.sort();
std::list<int> out;
std::set_intersection(list1.begin(), list1.end(), list2.begin(), list2.end(),
std::back_inserter(out));
for(auto k : out)
std::cout << k << ' ';
}
輸出:
2 5
編輯:
以上方法很可能不會荷蘭國際集團是最佳的,主要是因爲分選std::list
是不是很好的CPU ...
對於空間的權衡,下面的方法一定會成爲更大的數據集的速度更快,因爲我們遍歷通過每個列表只有一次,而且所有的操作在每次迭代完成不超越一個O(1)
攤銷複雜
我用std::unordered_multiset
而不是std::unordered_set
因爲它保留了普通副本的出現次數在這兩個列表
我跑dirty benchmark對隨機生成的9000
int
S中的兩種方法,其結果是(越低越好):
- :
Average timings for 100 runs: intersection_of: 8.16 ms sortAndIntersect: 18.38 ms
使用
std::set_intersection
方法的分析分類列表1的大小N
是:O(Nlog(N))
- 排序表2大小
M
的是:O(Mlog(M))
- 尋找交集:
O(M + N)
- 總:
O(Nlog(N) + Mlog(M) + M + N)
...(概括爲對數的)
假設M
和N
是相等的,我們可以概括它爲:O(Nlog(N))
但是,如果我們使用intersection_of
方法我張貼以上:
- 迭代通過列表1的大小爲
N
並且添加到該集合中的是:O(N) + O(1) = O(N)
- 遍歷列表2大小
M
,檢查多重集的,加入到out
,從列表中除去2:O(M) + O(1) + O(1) + O(1)
=O(M)
- 總計:
O(M + N)
...(概括爲線性)
假設M
和N
是相等的,我們可以將其概括爲:O(N)
相關問題
- 1. 兩個列表之間的交集F#
- 2. 兩個表中的行的子集之間的重疊/交集
- 3. 查找兩個候選字符串列表之間的交集
- 4. 如何找到兩個git提交之間的交集?
- 5. 檢查兩個Path2D之間的交集
- 6. C#兩個列表之間的差異
- 7. 如何識別Scala Spark中兩個數組之間的交集?
- 8. 刪除SQL Server中兩個表之間的交集
- 9. 獲取C#中兩個列表之間的清單列表
- 10. 查找兩個集合之間的交集MongoDB中
- 11. 如何計算兩個以上HashSets之間的交集?
- 12. 獲取Git中兩個標籤之間的新提交列表?
- 13. C# - IComparable對象列表之間的交集
- 14. 如何在兩個python應用程序之間交換數據?
- 15. Python中兩個字典中的值之間的交集
- 16. 如何計算C++中兩個STL集的交集的大小
- 17. 計算包含範圍的兩個列表之間的交集/截距
- 18. 我如何在兩個水平列表之間交叉一列的範圍?
- 19. 兩個詞典列表的交集?
- 20. 兩個大單詞列表的交集
- 21. 兩個鏈接列表的交集
- 22. 如何交換C中鏈接列表中的兩個節點?
- 23. 如何在Scala中的兩個列表之間執行集合論操作?
- 24. 如何查找SQL Server中兩個交叉列之間的時間(秒)
- 25. 2個範圍集之間的交集
- 26. 如何獲取兩個列表並返回Python中的集合的交集?
- 27. 兩個不在Python中使用集合的列表之間的通用元素
- 28. 如何在XUL中的兩個列表框之間拖放?
- 29. 獲取兩個提交之間的所有標記列表
- 30. 列表git提交兩個日期之間的主分支
如果列表*它們自己* co ntain重複? – Bathsheba
請[閱讀關於如何提出好問題](http://stackoverflow.com/help/how-to-ask),並學習如何創建[最小,完整和可驗證示例](http:// stackoverflow .COM /幫助/ MCVE)。 –
一種方法是遵循此處給出的示例:http://en.cppreference.com/w/cpp/algorithm/set_intersection。 – Bathsheba