Top K Frequent Elements

来源:互联网 发布:相片制作软件下载 编辑:程序博客网 时间:2024/05/16 11:31
题目描述:

LeetCode 347. Top K Frequent Elements

Given a non-empty array of integers, return the k most frequent elements.
For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2] .
Note:
You may assume k is always valid, 1 ≤ k ≤ number of unique elements.

Your algorithm's time complexity must be better than O( n log n ), where n is the array's size.


题目大意:

给定一个非空整数数组,返回其前k个出现次数最多的元素。

注意:
你可以假设k总是有效的,1 ≤ k ≤ 独立元素的个数。

你的算法时间复杂度必须优于O(n log n),其中n是数组的长度。

思路:

这题不难,但是万万没想到一次居然成功了。使用一个map,key=元素,value=频率

然后根据k输出高频率对应的元素到一个vector。

ps:也想多通过sort得到两个vector,功能类似map,但是麻烦一些


class Solution {public:vector<int> topKFrequent(vector<int>& nums, int k) {map<int, int> m;vector<int> ans;vector<int>::iterator it;for (it = nums.begin(); it < nums.end(); it++){if (m.count(*it)){m[*it]++;}else{m.insert(pair<int, int>(*it, 1));}}int key=-1;int key2=0;int i = 0;map<int,int>::iterator it2;for (i = 0; i<k; i++){key = -1;key2 = 0;for (it2 = m.begin(); it2 != m.end(); it2++){//数字,频率//key.insert(pair<int, int>(it2->first, it2->second));if (it2->second > key){key = it2->second;key2 = it2->first;} }ans.push_back(key2);m.erase(key2);}return ans;}};



0 0
原创粉丝点击