版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址

http://blog.csdn.net/lzuacm

C#版 - Leetcode 347. Top K Frequent Elements - 题解

在线提交: https://leetcode.com/problems/top-k-frequent-elements/

Description


Given a non-empty array of integers, return the k most frequent elements.

For example,

Given [1,1,1,2,2,3] and k = 2, return [1,2].

Note:

  • You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
  • Your algorithm’s time complexity must be better than O(n log n), where n is the array’s size.


思路:

使用字典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.

最新文章

  1. c# 字符串连接使用“+”和string.format格式化两种方式
  2. app 要求字体使用楷体,使用字体包
  3. 在Linux(Ubuntu)下搭建ASP.NET Core环境并运行 继续跨平台
  4. [内核同步]Linux内核同步机制之completion
  5. 疯狂抨击ie6下各种扭曲行为
  6. 【MVC】 文件及URL 的整理
  7. QQ群信息统计
  8. Java:JXL解析Excel文件
  9. .NET核心代码保护策略
  10. Visual Studio总是在重新生成项目?
  11. .NET Core实战项目之CMS 第四章 入门篇-Git的快速入门及实战演练
  12. 基于SpringMVC+Spring+MyBatis实现秒杀系统【数据库接口】
  13. 前端常用UI框架
  14. java----javaBean
  15. 《Visual C#从入门到精通》第四章使用复合赋值和循环语句——读书笔记
  16. javascript常见内存泄露
  17. hihoCoder#1743:K-偏差排列(矩阵快速幂+状压dp)
  18. 牛客小白月赛7 B 自杀游戏
  19. Operating System Error Codes
  20. Java内存模型(二)

热门文章

  1. windows许可证即将过期
  2. c++/qt的数据序列化和反序列化
  3. 三、自动化测试平台搭建-django-如何用mysql数据库做web项目
  4. iOS调用系统发送短信和邮件分享
  5. 【转】 web前端开发分享-目录
  6. 【2019雅礼集训】【最大费用流】【模型转换】D2T3 sum
  7. 印象笔记 MAC安装使用旧版本
  8. Git提交代码(要有GitHub账号)
  9. Luogu 3384 【模板】树链剖分
  10. Maven 插件之 docker-maven-plugin 的使用