• 数组中所有重复次数大于等于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 
  • 相关阅读:
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
    AOP概念的理解
    webx学习总结
    如何设计编制软件测试用例(一~三)
    冒烟测试小结(转载)
    在web.xml不认<taglib>解决办法
    document.domain 跨域问题【转】
    判断图片是否加载完成
    指定步长中间值
    关于 contentWindow, contentDocument
  • 原文地址:https://www.cnblogs.com/smailxiaobai/p/3675550.html
Copyright © 2020-2023  润新知