計算兩個數組的交集:
C#自帶Function:
Intersect()交集 Except()差集 Union()并集。本文考察算法哈:自帶的Buff咱不考慮。1.遍歷輸出,兩次for循環。O(n^2).最簡單,時間復雜度太大2.先排序,再利用下標循環。O(nlogn).3.同時遍歷兩個數組,放入一個新的容器。把重復的提出來即可。4.在3的基礎上我們可以引申出利用一些特殊集合更完美實現。HASH以及Dictionary。*先把一個數組全部放進一個容器中,注意:Key不能重復(唯一),否則拋異常。*我們也恰恰利用這個特性:哈希碰撞/字典碰撞 查重。*當然我們也可以利用這些容器的Contains()查重,效率也很快。感覺自己屌屌的有木有:public static List<int> Intersection(int[] nums1, int[] nums2) { var dicIntersect = new Dictionary<int, int>(); var intersectData = new List<int>(); // Traverse the first array. foreach (int data in nums1) { if (!dicIntersect.Keys.Contains(data)) { dicIntersect.Add(data, 0); } dicIntersect[data]++; } // Traverse the second array. foreach (int data in nums2) { /* Repeat the matched elements */ if (dicIntersect.Keys.Contains(data)) { intersectData.Add(data); } /* dictionary collision */ try { dicIntersect.Add(data,data); } //An item with the same key has already been added. //發生字典碰撞捕獲異常:說明重復Key出現,加入到List即為重復數據 catch (Exception ex) { intersectData.Add(data); } dicIntersect[data]++; } return intersectData; }
新聞熱點
疑難解答