如题public string[] DuplicateData(string[] a, string[] b)
{}如何写?谢谢,要求讲究效率,越快完成越好。

解决方案 »

  1.   


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

  2.   

    LinQ
      

  3.   

    LinQ 没有直接循环快吧
      

  4.   

    两种方法。
    一、用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();
    }
      

  5.   

    可能吧
    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>();}
      

  6.   


    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();
      

  7.   


    我这里提示 foreach (string s in a) dict.Add(s, true); 错误:值不能为空。。
      

  8.   

    原来是我搞错了,gomoku 的答案最快,惊人地块。。
      

  9.   


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

  10.   

    3万的数据,gomoku 那个7毫秒,你这个要24秒156毫秒
      

  11.   


    本地测试的,Core Quad Q8300,6GB内存,windows7(64位)