c#面试题 查找整型数组中重复出现次数最多的数字,次数相同数字按从小到大排序

来源:互联网 发布:什么是js面向对象 编辑:程序博客网 时间:2024/05/21 11:07

题目要求:查找整型数组中重复出现次数最多的数字,次数相同数字按从小到大排序

eg: 输入[1, 1,7,7,2, 3, 4, 5, 4 ] 

         输出[1,4,7]


First Idea:1.对数组进行排序

                      2.if(Nums[i]!=Num[i+1]) 来找出重复的数字 并且用变量 计数

                      3.找到次数最多的数字 得出结果


放弃理由:循环次数过多,变量过多。



Next idea:  通过lambada表达式

                     1.对数字根据数字本身分组

                      2.通过group by Count() descending的方式得到出现次数最多的数字

放弃理由:若有重复出现次数相同的数字,难以辨别。


Final Idea: 既然需要两个存储空间,一个存数字,一个存次数,Why not Dictionary?

   public static List<int> MaxAppearNum(int[] Nums)        {                      Array.Sort(Nums);            Dictionary<int, int> NumsDic = new Dictionary<int, int>();            int NumsLength = Nums.Length;            List<int> results = new List<int>();            for (int i = 0; i < NumsLength; i++)            {                if (NumsDic.ContainsKey(Nums[i]))                {                    NumsDic[Nums[i]]++;                }                else                {                    NumsDic.Add(Nums[i], 1);                }            }            int MaxValue = NumsDic.Values.Max();            //方法1            var resultNums = NumsDic.Where(s => s.Value.Equals(MaxValue));            foreach (var resultNum in resultNums)            {                                  results.Add(resultNum.Key);                           }            //方法2            foreach (var numdic in NumsDic)            {                if (numdic.Value == MaxValue)                {                    results.Add(numdic.Key);                }            }            return results;        }


0 0
原创粉丝点击