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

 

posted on 2022-09-07 16:01  ZhYQ_note  阅读(23)  评论(0)    收藏  举报

导航