求兩個集合的交集

  傳統的經過兩次循環講相同的元素去除的時間複雜度爲 O(M*N)數據結構

  利用hash這種頗有用的數據結構來實現。咱們知道,hash的特色之一就是不容許有重複元素,即hash表中的元素都是惟一的。因此,咱們的思路就是:先把第一個集合的全部元素都放進hashSet中,時間複雜度O(M);再把第二個集合中的元素放進hashSet中,若是有重複元素,就是這2個集合的交集,時間複雜度爲O(N)。即總的時間複雜度從O(M*N)下降到了O(M+N)spa

public static List<string> GetIntersection2(List<string> list1, List<string> list2)
{
    //第二種方法:hash
    List<string> list3 = new List<string>();

    HashSet<string> hashSet = new HashSet<string>();

    foreach (string item in list1)
    {
        hashSet.Add(item);
    }

    foreach (string item in list2)
    {
        if (hashSet.Add(item) == false)
        {
            list3.Add(item);
        }
    }

    return list3;
}
相關文章
相關標籤/搜索