欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

leetcode 692. 前K个高频单词

发布时间:2023/11/29 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 leetcode 692. 前K个高频单词 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目

给一非空的单词列表,返回前 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 次。

解题思路

  • 先使用map进行计数,统计每个单词出现的频率
  • 再将单词以及其出现的频率,放在一个二维数组中存储
  • 对这个二维数组进行排序,按照频率大的在前,相同频率的话按单词的字典序排列
  • 截取排序以后数组的前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个高频单词的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。