public string[] DuplicateData(string[] a, string[] b) { var v = from a1 in a from b1 in b where a1 == b1 select a1; return v.ToArray<string>(); }
LinQ
LinQ 没有直接循环快吧
两种方法。 一、用Hashtable(Dictionary<string, bool>),空间复杂度高点,但速度接近O(N) 二、排序后(O(N*LogN)单调递增寻找(O(N)),但稳定且空间复杂度为O(N)如果要写代码快,那么:) static public string[] DuplicateData(string[] a, string[] b) { return a.Intersect(b).ToArray(); }
可能吧 public string[] DuplicateData(string[] a, string[] b) { List<string> list = new List<string>(); for (int i = 0; i < a.Length; i++) { for (int j = 0; j < b.Length; j++) { if (a[i] == b[j]) list.Add(a[i]); } } return list.ToArray<string>();}
List<string> result = new List<string>();Dictionary<string, bool> dict = new Dictionary<string, bool>(); foreach (string s in a) dict.Add(s, true); foreach (string s in b) if (dict.ContainsKey(s)) result.Add(s);return result.ToArray();
我这里提示 foreach (string s in a) dict.Add(s, true); 错误:值不能为空。。
原来是我搞错了,gomoku 的答案最快,惊人地块。。
public static string[] DuplicateData(string[] a, string[] b) { List<string> tmp = new List<string>(); List<string> res = new List<string>(); foreach(string s in a) { if (tmp.Contains(s)) { if (!res.Contains(s)) res.Add(s); } else { tmp.Add(s); } } foreach (string s in b) { if (tmp.Contains(s) && !res.Contains(s)) { res.Add(s); } else { tmp.Add(s); } } return tmp.ToArray<string>(); }
public string[] DuplicateData(string[] a, string[] b)
{ var v = from a1 in a from b1 in b where a1 == b1 select a1; return v.ToArray<string>(); }
一、用Hashtable(Dictionary<string, bool>),空间复杂度高点,但速度接近O(N)
二、排序后(O(N*LogN)单调递增寻找(O(N)),但稳定且空间复杂度为O(N)如果要写代码快,那么:)
static public string[] DuplicateData(string[] a, string[] b)
{
return a.Intersect(b).ToArray();
}
public string[] DuplicateData(string[] a, string[] b)
{
List<string> list = new List<string>();
for (int i = 0; i < a.Length; i++)
{
for (int j = 0; j < b.Length; j++)
{
if (a[i] == b[j])
list.Add(a[i]);
}
}
return list.ToArray<string>();}
List<string> result = new List<string>();Dictionary<string, bool> dict = new Dictionary<string, bool>();
foreach (string s in a) dict.Add(s, true);
foreach (string s in b) if (dict.ContainsKey(s)) result.Add(s);return result.ToArray();
我这里提示 foreach (string s in a) dict.Add(s, true); 错误:值不能为空。。
public static string[] DuplicateData(string[] a, string[] b)
{
List<string> tmp = new List<string>();
List<string> res = new List<string>(); foreach(string s in a)
{
if (tmp.Contains(s))
{
if (!res.Contains(s))
res.Add(s);
}
else
{
tmp.Add(s);
}
} foreach (string s in b)
{
if (tmp.Contains(s) && !res.Contains(s))
{
res.Add(s);
}
else
{
tmp.Add(s);
}
}
return tmp.ToArray<string>();
}
本地测试的,Core Quad Q8300,6GB内存,windows7(64位)