日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode 692. 前K个高频单词

發布時間:2023/11/29 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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个高频单词的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。