题目要求:查找整型数组中重复出现次数最多的数字,次数相同数字按从小到大排序
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; }