美文网首页LeeCode题目笔记
2019-11-25 前 K 个高频元素

2019-11-25 前 K 个高频元素

作者: Antrn | 来源:发表于2019-11-25 21:29 被阅读0次

给定一个非空的整数数组,返回其中出现频率前 k 高的元素。

示例 1:

输入: nums = [1,1,1,2,2,3], k = 2
输出: [1,2]

示例 2:

输入: nums = [1], k = 1
输出: [1]

说明:

你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。
你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。

解决思路

思路很清晰,就是首先必须要遍历一遍nums数组,设计一个map用来存储数组中的值和某个值存在的次数。然而map中内部结构是红黑树,key是有序的,下一步就是利用value进行排序,将映射表中的元素先转储到pair<int ,int>中,然后对其进行按值逆序排序,然后只需要再次遍历包含pair元素的数组的前k的元素,将其firstpush_back到一维数组中返回。

C++1
class Solution {
public:
    static int cmp(const pair<int, int>& x, const pair<int, int>& y)  
    {  
        return x.second > y.second;  
    }  
   
    void sortMapByValue(map<int, int>& tMap,vector<pair<int, int> >& tVector)  
    {  
        for (map<int, int>::iterator curr = tMap.begin(); curr != tMap.end(); curr++)   
            tVector.push_back(make_pair(curr->first, curr->second));    
        sort(tVector.begin(), tVector.end(), cmp);  
    }  

    vector<int> topKFrequent(vector<int>& nums, int k) {
        map<int,int> hm;
        for(int i: nums){
            if(hm.count(i)<=0){
                hm.insert(make_pair(i, 1));
            }else{
                hm[i] = hm[i]+1;
            }
        }
        vector<pair<int,int>> tVector;
        sortMapByValue(hm,tVector);
        
        
        vector<int> res;
        int c=0;
        for(int i=0;i<tVector.size();i++){
            if(c == k){
                break;
            }else{
                res.push_back(tVector[i].first);
                c++;       
            }
        }
        return res;
    }
};
参考博客

C++ 对map进行排序
c++ STL中常见容器的时间复杂度
c++ map与unordered_map区别及使用
c++中map与unordered_map的区别
C++中pair的用法

相关文章

  • 2019-11-25 前 K 个高频元素

    给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 示例 1: 示例 2: 说明: 你可以假设给定的 k ...

  • 347. 前 K 个高频元素

    347. 前 K 个高频元素

  • 前K个高频元素

    给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 说明: 你可以假设给定的 k 总是合理的,且 1 ≤ ...

  • 前K个高频元素

    给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 示例 1: 输入: nums = [1,1,1,2,2...

  • 前 K 个高频元素

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/top-...

  • 前K个高频元素

    题目描述:给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 示例:输入: nums = [1,1,1,2...

  • LeetCode 栈、队列、优先队列专题 6:优先队列也是队列

    例题:LeetCode 第 347 题:前K个高频元素 传送门:347. 前K个高频元素。 给定一个非空的整数数组...

  • 算法笔记

    子序列 LC128. 最长连续序列 TOPK LC347. 最K个高频元素 LC347. 前K个高频元素 LC21...

  • LeetCode 347 前 K 个高频元素

    347. 前 K 个高频元素 这次是求前K个高频元素,同理,用堆其实最好解决,具体的步骤是:1.先建立一个hash...

  • 347前K个高频元素

    题目描述 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 示例 1: 输入: nums = [1,1,...

网友评论

    本文标题:2019-11-25 前 K 个高频元素

    本文链接:https://www.haomeiwen.com/subject/hfqswctx.html