您的位置:首页 > 产品设计 > UI/UE

leetcode-347-Top K Frequent Elements

2017-04-19 19:59 441 查看

问题

题目:[leetcode-347]

思路

Map怎么对value进行排序。

参考了这篇链接[C++ STL中Map的按Key排序和按Value排序]

代码

typedef pair<int, int> Pair;
bool cmp_by_value(Pair& lhs, Pair& rhs){
return rhs.second < lhs.second;
}

class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
vector<int> ret;
map<int, int> mapper;
int sz = nums.size();
if(k > sz) return ret;

for(int i = 0; i < sz; ++i){
++mapper[nums[i]];
}

vector<Pair> vec( mapper.begin(), mapper.end() );
sort( vec.begin(), vec.end(), cmp_by_value );

for(int i = 0; i < k; ++i){
ret.push_back(vec[i].first);
}
return ret;
}
};


思路1

这个题,要是不用函数对象,要写在类里面还真不行。

代码1

class Solution {
public:
vector<int> topKFrequent(vector<int>& nums, int k) {
map<int, int> counter;
int sz = nums.size();
vector<int> ret;

if(!sz || k < 1) return ret;

for(int i = 0; i < sz; ++i){
++counter[ nums[i] ];
}

// sort the mapper
typedef pair<int, int> pair_t;
vector<pair_t> vec( counter.begin(), counter.end() );

struct CmpByValue{
bool operator()(pair_t& lhs, pair_t& rhs) {return lhs.second > rhs.second; }
};

sort( vec.begin(), vec.end(), CmpByValue() );

for(int i = 0; i < k; ++i ){
ret.push_back( vec[i].first );
}

return ret;
}
private:

};


当然,函数对象有一个内联的特点,据说是要比函数调用效率高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: