LeetCode练习题 -前K个高频单词(Java)

本文介绍了如何使用Java解决LeetCode中的一个问题——找出文本中出现频率前K的单词。首先解析了题目的要求,然后详细阐述了解题思路,包括数据结构的选择和算法设计。接着,提供了完整的Java代码实现,该代码能够有效地找出并返回这些高频单词。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

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

注意:

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

思路:

用一个map保存所有单词,key表示单词,value表示该单词出现的次数;
将统计的单词放到ArrayList中;
对ArrayList进行排序;
返回前k个单词

代码:

import java.util.*;

public class MapExample5 {
    //前K个高频词

    /*
    题目描述:
            给一非空的单词列表,返回前 k 个出现次数最多的单词。

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

     思路:
            1、用一个map保存所有单词,key表示单词,value表示该单词出现的次数;
            2、将统计的单词放到ArrayList中;
            3、对ArrayList进行排序;
            4、返回前k个单词
     */

    public List<String> topKFrequent(String[] words, int k){
        //1、用一个map保存所有单词
        Map<String,Integer> map = new HashMap<>();
        for(String s : words){
            int count = map.getOrDefault(s,0);
            map.put(s,count+1);
        }
        //2、将统计的单词放到ArrayList中;
        ArrayList<String> arrayList = new ArrayList(map.keySet());
        //3、排序
        Collections.sort(arrayList,(o1,o2)->{
            int count1 = map.get(o1);
            int count2 = map.get(o2);
            if(count1 == count2){
                return o1.compareTo(o2);
            }
            return count2-count1;
        });
        //4、返回前k个单词
        return arrayList.subList(0,k);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值