LeetCode No.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.
====================================================================================
题目链接:https://leetcode.com/problems/top-k-frequent-elements/
题目大意:求出给定数组中出现最多的k个元素,要求使用时间复杂度为O(n log n)的算法。
思路:先建立一个map映射表,将元素映射到个数,然后存入vector中,通过自定义排序函数(先按出现个数从大到小排序,在按元素从小到大排序),对vector进行排序,则vector中前面k个元素就是我们要求的结果。
附上代码:
class Solution {
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {
        map <int,int> maper ;
        int n = nums.size() ;
        for ( int i = 0 ; i < n ; i ++ )//构建map表,元素映射到个数
            maper[nums[i]] ++ ;
        vector < pair <int,int> > v ;
        for ( map <int,int>::iterator it = maper.begin() ; it != maper.end() ; it ++ )//存入vector中
        {
            v.push_back ( make_pair ( it -> first , it -> second ) ) ;
        }
        sort ( v.begin() , v.end() , cmp ) ;//先按出现个数从大到小排序,在按元素从小到大排序
        vector <int> ans ;
        for ( int i = 0 ; i < k ; i ++ )//取前k个
        {
            ans.push_back ( v[i].first ) ;
        }
        return ans ;
    }
private:
    static bool cmp ( const pair<int,int>& a , const pair<int,int>& b )//先按出现个数从大到小排序,在按元素从小到大排序
    {
        if ( a.second == b.second )
            return a.first < b.first ;
        return a.second > b.second ;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值