首先需要的是和面试的人确认题目的含义,并非直接答题。
创新互联于2013年创立,先为南岗等服务建站,南岗等地企业,进行企业商务咨询服务。为南岗企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。然后,可以提出自己的想法,首先最快的是用linq
{
List<int> array0 = new List<int>() { 1, 2, 9, 3, 5, 2 };
List<int> array1 = new List<int>() { 3, 2, 7 };
List<int> arrayInterSect = array0.Intersect(array1).ToList(); // 交集
最好写个函数:
public List<int> GetInterSect(List<int> array0, List<int> array1)
{
return array0.Intersect(array1).ToList();
}
如果是差集合并集的话,可以用如下方法解决:
List<int> arrayExcept = array0.Except(array1).ToList();// 差集 List<int> arrayUnion = array0.Union(array1).ToList(); // 并集
当然,考算法的话,还需要进一步进行。
基本思路可以口头说明是用两个for 循环,逐个匹配。 T(n) = O(n^2); 不要实现,因为O(n^2)的算法不好。
其次稍好的方法可以先快排数组,然后两边同时开始遍历数组。时间复杂度是 O(nlogn).
O(n)的算法才是期望的答案。可以采用Hashtable, 或者Dictionary.
// The values in array0/array1 must be unique. public static List<int> GetIntersect(List<int> array0, List<int> array1)
{
Dictionary<int, int> dicIntersect = new Dictionary<int, int>();
List<int> intersectData = new List<int>();
// Traverse the first array. foreach (var data in array0)
{
if (!dicIntersect.Keys.Contains(data))
{
dicIntersect.Add(data,0);
}
dicIntersect[data]++;
}
// Traverse the second array. foreach (var data in array1)
{
if (!dicIntersect.Keys.Contains(data))
{
dicIntersect.Add(data,0);
}
dicIntersect[data]++;
}
// Traverse the dictionary to find the duplicated values. foreach (var intData in dicIntersect)
{
if (intData.Value > 1)
{
intersectData.Add(intData.Key);
}
}
return intersectData;
}
}
文章题目:(C#)求两个数组的交集-创新互联
转载源于:https://www.cdcxhl.com/article4/hghie.html
成都网站建设公司_创新互联,为您提供云服务器、软件开发、搜索引擎优化、网站收录、关键词优化、品牌网站设计
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联