zoukankan      html  css  js  c++  java
  • 数组中所有重复次数大于等于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 
  • 相关阅读:
    使用相对路径名导入包中子模块
    python中子类使用父类属性
    快速掌握Java8 Stream函数式编程技巧
    灵感来袭,基于Redis的分布式延迟队列(续)
    寻找最长不含有重复字符的子串 示例
    golang学习笔记---函数示例
    golang学习笔记---逐行读取文件示例
    golang学习笔记---int转二进制示例
    golang学习笔记---iota(枚举自增值)
    golang学习笔记 ----container/list包用法
  • 原文地址:https://www.cnblogs.com/smailxiaobai/p/3675550.html
Copyright © 2011-2022 走看看