数组中所有重复次数大于等于minTimes的数字

    class Program
    {
        static void Main(string[] args)
        {
            int[] input = { 1, 1, 1, 2, 2, 5, 2, 4, 9, 9, 20 };
            IDuplicationFinder dup1 = new Duplication1();
            string str1 = dup1.FindDuplication(input, 3);
            Console.WriteLine(str1);

            IDuplicationFinder dup2 = new Duplication2();
            string str2 = dup2.FindDuplication(input, 3);
            Console.WriteLine(str2);
            Console.Read();
        }
    }
    class Duplication1 : IDuplicationFinder
    {
        public string FindDuplication(int[] input, uint minTimes)
        {
            Dictionary<int, int> valuedic = new Dictionary<int, int>();
            #region 整个完全遍历
            //foreach (var v in input)
            //{
            //    var numtimes = input.Where(m => m == v).Count();
            //    if (numtimes >= minTimes && !valuedic.Keys.Contains(v))
            //        valuedic.Add(v, numtimes);
            //}
            #endregion
            #region linq group
            var groupnum = input.GroupBy(m => m);
            foreach (var g in groupnum)
            {
                if (g.Count() >= minTimes)
                    valuedic.Add(g.Key, g.Count());
            }
            #endregion
            return GetValue(valuedic);
        }
        private static string GetValue(Dictionary<int, int> valuedic)
        {
            StringBuilder sb = new StringBuilder();
            foreach (var d in valuedic)
            {
                sb.AppendFormat("{0}出现了{1}次", d.Key, d.Value);
                sb.AppendLine();
            }
            return sb.ToString();
        }

    }
    class Duplication2 : IDuplicationFinder
    {
        public string FindDuplication(int[] input, uint minTimes)
        {
            List<int> result = new List<int>();
            Array.Sort(input);
            if (minTimes == 1)//如果次数是1,就要把去重显示
            {
                if (input[0] == input[1])
                    result.Add(input[1]);
                for (int i = 1; i < input.Length - 1; i++)
                {
                    if (input[i] != input[i + 1])
                        result.Add(input[i + 1]);
                }
            }
            else
            {
                int count = 1;//排序后 前一个跟后一个对比,所以从1开始
                for (int i = 0; i < input.Length - 1; i++)
                {
                    if (result.Count > 0 && result.Last() == input[i])
                        continue;
                    if (input[i] == input[i + 1])
                    {
                        count++;
                        if (count >= minTimes)
                        {
                            result.Add(input[i]);
                            count = 1;
                        }
                    }

                }
            }

            return string.Join(",", result);
        }
    }
    interface IDuplicationFinder
    {
        string FindDuplication(int[] input, uint minTimes);
    }

  

t=[1,22,33,1,44,22,11,3,224,5,6,22,1,44]//查找出现次数最多的数字和次数 ruby
hst={}
t.each do  |item|   
  if(hst.key?(item)) 
     hst[item]+=1 
  else 
    hst[item]=1 
  end
end
p hst
b = Hash[hst.sort_by(){ |k, v| v }.reverse]
p b
p b.first 

 

posted @ 2014-04-19 20:56  Rookier  阅读(594)  评论(1编辑  收藏  举报