347. 前 K 个高频元素 C#
原文地址:https://www.361shipin.com/blog/1513951384511184896
思路: 使用字典Dictionary<int, int>存储每个数出现的次数,并对次数进行排序。有两种方法; 1.将Dictionary转为List,实现Sort的CompareTo方法; 2.使用Dictionary的OrderByDescending(f => f.value),并Take(k)。 由于转换为List后进行排序会让程序速度变慢,建议直接用后一种方法。 已AC代码: public class Solution { public IList<int> TopKFrequent(int[] nums, int k) { var dict = new Dictionary<int, int>(); IList<int> result = new List<int>(); foreach (var num in nums) { if (!dict.ContainsKey(num)) dict.Add(num, 1); else dict[num]++; } var list = dict.ToList(); list.Sort((x, y) => -x.Value.CompareTo(y.Value)); if (list.Count >= k) { for (int i = 0; i < k; i++) { result.Add(list.ElementAtOrDefault(i).Key); } } return result; } } 改进版: public class Solution { public IList<int> TopKFrequent(int[] nums, int k) { var dict = new Dictionary<int, int>(); IList<int> result = new List<int>(); foreach (var num in nums) { if (!dict.ContainsKey(num)) dict.Add(num, 1); else dict[num]++; } var list = dict.OrderByDescending(f => f.Value).Take(k).ToList(); for (int i = 0; i < k; i++) result.Add(list.ElementAtOrDefault(i).Key); return result; } } Rank: You are here! Your runtime beats 99.28 % of csharp submissions. 转载于:https://www.cnblogs.com/enjoy233/p/10408704.html