我有n个数组,先求任意n-1个数组的交集
然后再求得到的新的n个数组的并集
例如:有5个数组
先求
a1 a2 a3 a4的交集b1
a1 a2 a3 a5的交集b2
a1 a2 a4 a5的交集b3
a1 a3 a4 a5的交集b4
a2 a3 a4 a5的交集b5
然后求得到的新的数组b1,b2,b3,b4,b5的并集
求方法
然后再求得到的新的n个数组的并集
例如:有5个数组
先求
a1 a2 a3 a4的交集b1
a1 a2 a3 a5的交集b2
a1 a2 a4 a5的交集b3
a1 a3 a4 a5的交集b4
a2 a3 a4 a5的交集b5
然后求得到的新的数组b1,b2,b3,b4,b5的并集
求方法
解决方案 »
- 像news.qq.com那样的新闻标题?
- 为什么apsx页面中引入多个js文件,为什么只有下一个js起重要
- 把SQL server中的数据画成X-Y曲线?
- ReportViewer 可以绑定dataset吗?一天了,救急呀!!!
- 请教关于ado.net调用存储过程
- 按钮如何在自身的单击事件中取得自己的属性??
- 当我执行一次onclick事件的时候...刷新页面,又执行了一次..我晕死了...
- 请问如何把图片提交到另一个网站的目录
- ASP.NET页面中这个特殊的排版怎么绑定呢,用什么控件呢
- 关于客户端listbox的值回传﹐请指点一下﹐(在线等待结帖)
- 在winform中控件绑定数据后,可以多选数据,如图所示,使用的哪个控件,或者这个如图所示功能,怎么实现
- 如何调试调用的WebSerivce
for (int i = 0; i < 5; i++)
list.Add(Enumerable.Range(1, 20).OrderBy(T => Guid.NewGuid()).Take(10).ToArray());
list.ForEach(t => Console.WriteLine(string.Join(",", t.Select(T => T.ToString()).ToArray())));
int[] source = new int[0];
for (int i = 0; i < 5; i++)
{
List<int[]> lst = new List<int[]>();
list.Select((t, index) => { if (index != i)lst.Add(t); return 0; }).ToArray();
source = source.Union(lst.Aggregate((a, b) => a.Intersect(b).ToArray())).ToArray();
}
Console.WriteLine(string.Join(",", source.Select(T => T.ToString()).ToArray()));
al.Add(new int[] { 1 });
al.Add(new int[] { 1, 2, 3, 4 });
al.Add(new int[] { 1,3 });
al.Add(new int[] { 3, 4 });
al.Add(new int[] { 1, 2 }); List<int[]> al2 = new List<int[]>();
for (int i = 0; i < al.Count; i++)
{
int[] s = null;
for (int j = 0; j < al.Count; j++)
{
if (i != j)
{
if (j == 0)
{
s = al[j];
}
else
{
if (i == 0)
{
if (j == 1)
{
s = al[j];
}
else
{
s = (s.Intersect(al[j])).ToArray();
}
}
else
{
s = (s.Intersect(al[j])).ToArray();
}
}
}
}
al2.Add(s);
} int[] t = null;
for (int k = 0; k < al2.Count; k++)
{
if (k == 0)
{
t = al2[0];
}
else
{
t = (t.Intersect(al2[k])).ToArray();
}
} //最后得到的t就是你所要的数据
有n个数组,先求任意n-1个数组的交集
然后再求得到的新的n个数组的并集
说明里边的元素至少要出现n-1次
所以我的做法就是先把所有的n个数组求并集
然后提取出现次数大于等于n-1次的元素
然后去重还望大家指点