求两个集合的交集

  传统的通过两次循环讲相同的元素去除的时间复杂度为 O(M*N)

  利用hash这种很有用的数据结构来实现。我们知道,hash的特点之一就是不允许有重复元素,即hash表中的元素都是唯一的。所以,我们的思路就是:先把第一个集合的所有元素都放进hashSet中,时间复杂度O(M);再把第二个集合中的元素放进hashSet中,如果有重复元素,就是这2个集合的交集,时间复杂度为O(N)。即总的时间复杂度从O(M*N)降低到了O(M+N)

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;
}

 

posted @ 2016-01-07 13:40  Flying_Boy  阅读(1459)  评论(0编辑  收藏  举报