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

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

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 MaxAppearNum(int[] Nums)
        {
          
            Array.Sort(Nums);
            Dictionary NumsDic = new Dictionary();
            int NumsLength = Nums.Length;
            List results = new List();
            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;
        }


你可能感兴趣的:(C#)