积少成多

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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: 

    • 347. Top K Frequent ElementsYou 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.

========

题目:

因为c++中提供的哈希表map,不能按照value进行排序,

我们需要一个按照value值进行排序的数据结构,所以需要自定义一个.

定义排序函数,static bool mykeyval(const keyval &l, const keyval &r){}

利用自带的sort()函数就可以了.

====

代码

class Solution {
public:
    struct keyval{
        int key;//数字
        int val;//数字出现的次数
        keyval(int k=0,int v=0):key(k),val(v){}
    };
    static bool mykeyval(const keyval &l,const keyval &r){
        return l.val>r.val;
    }
    vector<int> topKFrequent(vector<int>& nums, int k) {
        map<int,int> m;///key,multis
        vector<int> re;
        for(auto i: nums){
            m[i]++;
        }
        vector<keyval> tmp(m.size());
        int d = 0;
        for(auto i: m){
            tmp[d].key = i.first;
            tmp[d++].val = i.second;
        }
        sort(tmp.begin(),tmp.end(),mykeyval);
        for(int i = 0;i<k;i++){
            re.push_back(tmp[i].key);
        }
        return re;
    }
};

 

posted on 2016-06-22 22:03  x7b5g  阅读(166)  评论(0编辑  收藏  举报