其他分享
首页 > 其他分享> > Leetcode347.前K个高频元素

Leetcode347.前K个高频元素

作者:互联网

 

 

首先想到的是哈希表,用unordered_map存储每个元素出现的次数,再对次数进行排序,最后找到前k多个出现的元素即可。

代码:

class Solution {
public:
    static bool cmp(const pair<int, int> &lhs, const pair<int, int> &rhs) {
        return lhs.second > rhs.second;
    }

    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int, int> map;
        for (int num : nums) {
            map[num]++;
        }

        vector<pair<int, int>> vec(map.begin(), map.end());
        sort(vec.begin(), vec.end(), cmp);
        vector<int> result;
        for (int i = 0; i < k; i++) {
            result.push_back(vec[i].first);
        }
        return result;
    }
};

首先将nums中的元素以及其出现的次数放入unordered_map中,然后unordered_map中的元素根据value值进行排序,最后输出前k个。

1.比较的函数前面需要加上static

    static bool cmp(const pair<int, int> &lhs, const pair<int, int> &rhs) {
        return lhs.second > rhs.second;
    }

2.unordered_map本身不能对value值进行排序,需要将其装换成vector再进行排序操作,代码如下

vector<pair<int, int>> vec(map.begin(), map.end());

被代码未优化,但优点在于比较清晰

标签:map,元素,Leetcode347,second,vector,lhs,vec,高频,unordered
来源: https://www.cnblogs.com/wtc331/p/15156334.html