Leetcode: 347. 前 K 个高频元素 和 Leetcode: 692. 前K个高频单词
2026/7/8 2:15:29 网站建设 项目流程

Leetcode:347. 前 K 个高频元素:

题目

给你一个整数数组nums和一个整数k,请你返回其中出现频率前k高的元素。你可以按任意顺序返回答案。

题目链接:347. 前 K 个高频元素

示例 1:

输入:nums = [1,1,1,2,2,3], k = 2

输出:[1,2]

示例 2:

输入:nums = [1], k = 1

输出:[1]

示例 3:

输入:nums = [1,2,1,2,1,2,3,1,3,2], k = 2

输出:[1,2]

方法一: map + vector+ sort

解题思路:

题目让返回前k个高频元素

①首先使用map来统计各个元素出现的次数,②然后map放到vector里面,③接着使用sort函数来实现对map里面的值(也就是这里出现的频数)进行排序,④最后再把前k个数重新放到新的vector里面去用于结果返回。

代码展示:

class Solution { public: static bool cmp(pair<int,int>& a , pair<int,int>& b) { return a.second > b.second; } vector<int> topKFrequent(vector<int>& nums, int k) { //1 先统计每个数字出现的个数 map<int,int> countMap; for(auto& e : nums) { countMap[e]++; } //2 把map放到vector数组里面 vector<pair<int,int>> v; for(auto& e : countMap) { v.push_back(e); } //3使用sort函数进行比较 sort(v.begin(),v.end(),cmp); //返回vector数组前k个 vector<int> ret; for(int i = 0;i<k;i++) { ret.push_back(v[i].first); } return ret; } };

图解:

692. 前K个高频单词

题目

给定一个单词列表words和一个整数k,返回前k个出现次数最多的单词。

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

题目链接:692. 前K个高频单词

示例 1:

输入:words = ["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 次。

方法一:

解题思路:

题目让返回前k个出现次数最多的单词,频率相同就按字典顺序

首先使用map进行统计每个单词出现的次数,把map放到vector中,然后使用sort函数进行排序(这里的比较逻辑需要加上 当两个单词的频率相同使用字典顺序进行排序),最后使用新vector记录出现次数高的前k个单词并返回。

代码展示:

class Solution { public: static bool cmp(const pair<string,int>& a, const pair<string,int>& b) { if(a.second != b.second) { return a.second > b.second; } return a.first < b.first; //这里当频率相同,按字典顺序进行返回 } vector<string> topKFrequent(vector<string>& words, int k) { //1 先使用map进行统计每个单词出现的次数 map<string,int> countMap; for(auto& e : words) { countMap[e]++; } //2 根据每个单词出现的次数进行排序 //2.1先放到 vector中 vector<pair<string,int>> v; for(auto& e : countMap) { v.push_back(e); } //2.2 使用sort函数进行排序 sort(v.begin(),v.end(),cmp); //3 把前k个高频单词放到res vector<string> res; for(int i = 0;i<k;i++) { res.push_back(v[i].first); } return res; } };

方法小改进:借助仿函数

struct Cmp { bool operator()(const pair<string,int>& a, const pair<string,int>& b) const { if(a.second != b.second) { return a.second > b.second; } return a.first < b.first; } }; class Solution { public: vector<string> topKFrequent(vector<string>& words, int k) { //1 先使用map进行统计每个单词出现的次数 map<string,int> countMap; for(auto& e : words) { countMap[e]++; } //2 根据每个单词出现的次数进行排序 //2.1先放到 vector中 vector<pair<string,int>> v; for(auto& e : countMap) { v.push_back(e); } //2.2 使用sort函数进行排序 sort(v.begin(),v.end(),Cmp()); //3 把前k个高频单词放到res vector<string> res; for(int i = 0;i<k;i++) { res.push_back(v[i].first); } return res; } };

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询