首页 > 学院 > 开发设计 > 正文

数据结构实例<五>(Intersection)容易

2019-11-08 02:04:34
字体:
来源:转载
供稿:网友

题目:

计算两个数组的交集:   

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表