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

    xiaoxiao2021-03-25  66

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

    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;         }

    转载请注明原文地址: https://ju.6miu.com/read-36528.html

    最新回复(0)