题目

给一非空的单词列表,返回前 k 个出现次数最多的单词。

返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。

示例 1:

输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2
输出: ["i", "love"]
解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。
注意,按字母顺序 "i" 在 "love" 之前。

示例 2:

输入: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4
输出: ["the", "is", "sunny", "day"]
解析: "the", "is", "sunny" 和 "day" 是出现次数最多的四个单词,
出现次数依次为 4, 3, 2 和 1 次。

解题思路

  1. 先使用map进行计数,统计每个单词出现的频率
  2. 再将单词以及其出现的频率,放在一个二维数组中存储
  3. 对这个二维数组进行排序,按照频率大的在前,相同频率的话按单词的字典序排列
  4. 截取排序以后数组的前K个单词作为结果返回

代码

class Solution {public List<String> topKFrequent(String[] words, int k) {HashMap<String, Integer> map = new HashMap<>();for (String s : words) {map.put(s,map.getOrDefault(s,0)+1);}int n = map.size(),i=0;String[][] strings = new String[n][2];for (String string : map.keySet()) {strings[i][0]=string;strings[i][1]= String.valueOf(map.get(string));i++;}Arrays.sort(strings,(o1, o2) -> o1[1].compareTo(o2[1])==0?o1[0].compareTo(o2[0]):Integer.parseInt(o2[1])-Integer.parseInt(o1[1]));ArrayList<String> list = new ArrayList<>();for (int j = 0; j < k; j++) {list.add(strings[j][0]);}return list;}
}

结果

速度优化版代码

取消了存储单词出现次数的数组,改为直接从map里面获取出现次数

public List<String> topKFrequent(String[] words, int k) {HashMap<String, Integer> map = new HashMap<>();for (String s : words) {map.put(s,map.getOrDefault(s,0)+1);}int n = map.size(),i=0;String[] strings = new String[n];for (String string : map.keySet()) {strings[i]=string;i++;}Arrays.sort(strings,(o1, o2) -> map.get(o1)==map.get(o2)?o1.compareTo(o2):map.get(o2)-map.get(o1));ArrayList<String> list = new ArrayList<>();for (int j = 0; j < k; j++) {list.add(strings[j]);}return list;}

结果

leetcode 692. 前K个高频单词相关推荐

  1. 用Java输出高频词_Java实现 LeetCode 692 前K个高频单词(map的应用)

    692. 前K个高频单词 给一非空的单词列表,返回前 k 个出现次数最多的单词. 返回的答案应该按单词出现频率由高到低排序.如果不同的单词有相同出现频率,按字母顺序排序. 示例 1: 输入: [&qu ...

  2. LeetCode 692. 前K个高频单词(优先队列)

    1. 题目 给一非空的单词列表,返回前 k 个出现次数最多的单词. 返回的答案应该按单词出现频率由高到低排序. 如果不同的单词有相同出现频率,按字母顺序排序. 示例 1: 输入: ["i&q ...

  3. 2022-1-29 Leetcode 692.前K个高频单词

    这道题中学到的几个知识点: 优先队列的排序规则是什么? The comparison function used to determine whether one element is smaller ...

  4. 力扣692.前K个高频单词

    692.前K个高频单词 思路1: 创建HashMap,并把单词以及其频率存进HashMap中 将keySet()存进List链表中,并用Collections的sort进行逻辑的排序 再创建满足题意的 ...

  5. 692. 前K个高频单词

    前K个高频单词 给一非空的单词列表,返回前 k 个出现次数最多的单词. 返回的答案应该按单词出现频率由高到低排序.如果不同的单词有相同出现频率,按字母顺序排序. 示例 1: 输入: ["i& ...

  6. 692前K个高频单词(哈希表+排序)

    1.题目描述 给一非空的单词列表,返回前 k 个出现次数最多的单词. 返回的答案应该按单词出现频率由高到低排序.如果不同的单词有相同出现频率,按字母顺序排序. 注意: 假定 k 总为有效值, 1 ≤ ...

  7. 算法题——前K个高频单词

    每日刷题LeetCode--692. 前K个高频单词 给一非空的单词列表,返回前 k 个出现次数最多的单词. 返回的答案应该按单词出现频率由高到低排序.如果不同的单词有相同出现频率,按字母顺序排序. ...

  8. leetcode 前K个高频单词

    692. 前K个高频单词 题目 给一非空的单词列表,返回前 k 个出现次数最多的单词. 返回的答案应该按单词出现频率由高到低排序.如果不同的单词有相同出现频率,按字母顺序排序. 示例1 输入: [&q ...

  9. 前k个高频单词【Java】

    前k个高频单词 问题描述 给一非空的单词列表,返回前 k 个出现次数最多的单词. 返回的答案应该按单词出现频率由高到低排序.如果不同的单词有相同出现频率,按字母顺序排序. 示例 1: 输入: [&qu ...

最新文章

  1. 【TensorFlow2.0】(6) 数据统计,范数、最值、求和、均值、最值位置、唯一值、张量比较
  2. 车辆匹配和平均车速计算
  3. win7能用的matlab,win7环境下使用matlab7.0(R14)方法
  4. win7分区c盘调整容量_重装Win7系统步骤「xitongtiandi.net」
  5. unordered_map的使用特性
  6. CentOS5.6配置salt节点minion
  7. 使用RMAN验证备份的有效性
  8. 递归法实现库函数strlen
  9. LeetCode 1038. 从二叉搜索树到更大和树(逆中序-右根左-降序)
  10. 填平数据、产品、模式需求鸿沟,浪潮云发布新一代行业云 MEP战略
  11. linux iphone 同步时间,与iPad/iPhone同步
  12. ko文件卸载 linux_调试lcd时候给linux单板移植tslib
  13. [译]R语言——Shiny框架之构建(一):1.结构——1.独立应用程序——1.应用的格式和启动
  14. css浮动层被遮盖,兼容主流浏览器的背景遮盖和居中浮动层的CSS样式
  15. vue中防止用户频繁点击按钮
  16. 房东房源管理小程序开发功能
  17. 毛星云opencv7.1之边缘检测,滤波器和步骤介绍
  18. 海康威视:笔试题(20190908)
  19. 阿里巴巴国际站如何发布高质量的产品?
  20. win10打开蓝牙_Win10隐藏技巧:如何一键开启蓝牙功能!

热门文章

  1. (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作
  2. 【计算机系统设计】实践笔记(6)改进数据通路:lw和sw指令
  3. 全套学习!mysql命令窗口执行sql文件
  4. Java高级面试题!java编程思想怎么学
  5. 你知道怎么在生产环境下部署tomcat吗?
  6. c语言中如何取消最后一个空格,新人提问:如何将输出时每行最后一个空格删除...
  7. 企业级应用,如何实现服务化一(项目架构演化)
  8. 2019/2/18 Python今日收获
  9. jquery插件dataTables自增序号。
  10. codevs 1907 方格取数 3