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

347.前 K 个高频元素

时间:2023-04-02 11:34:04浏览次数:33  
标签:vector const nums auto 元素 347 que vec 高频

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

示例 1:

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

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

class cmp
{
public:
    bool operator()(const std::pair<int, int> &a, const std::pair<int, int> &b)
    {
        return a.second > b.second;
    }
    //由于每次出队的时候都是将最小的元素和最后一个元素互换,导致形成小顶堆
};

class Solution {
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {
        for (const auto &i : nums)
        {
            mp[i]++;
        }
        std::priority_queue<std::pair<int,int>,vector<std::pair<int, int>>,cmp> que;
        //维护一个只有k个元素的小顶堆
        for (auto it = mp.begin();it!=mp.end();it++)
        {
            if (que.size() == k)
            {
                que.push(*it);
                que.pop();
            }
            else
            {
                que.push(*it);
            }
        }
        //将最后小顶堆中的元素倒序输出即为res
        vector<int> result(k);
        for (int i = k - 1; i >= 0; i--) {
            result[i] = que.top().first;
            que.pop();
        }
        return result;
    }
 vector<int> topKFrequent(vector<int>& nums, int k) {
        for (const auto &i : nums)
        {
            mp[i]++;
        }
        vector<std::pair<int, int>> vec;
        for (const auto& item : mp)
        {
            vec.emplace_back(item);
        }
        std::sort(vec.begin(), vec.end(),
            [](const auto& x, const auto& y)->bool {return x.second > y.second; });
        vec.resize(k);
        for (const auto& item : vec)
        {
            res.emplace_back(item.first);
        }
        return res;
    }
private:
    std::unordered_map<int, int> mp;
};

标签:vector,const,nums,auto,元素,347,que,vec,高频
From: https://www.cnblogs.com/lihaoxiang/p/17280128.html

相关文章

  • Python遍历时删除元素问题(附深拷贝与浅拷贝介绍)
    问题有时候,我们希望用Python遍历一个列表(或其他可迭代对象),如果其中有我们不需要的元素就把它删除并继续遍历。如以下代码段,我们本希望打印1、3,可最后却只打印了1。a=[1,2,3]foriina:ifi==2:a.remove(i)else:print(i)分析其实,之所以......
  • 算法随想Day51【单调栈】| LC739-每日温度、LC496-下一个更大元素Ⅰ
    LC739.每日温度vector<int>dailyTemperatures(vector<int>&temperatures){intsize=temperatures.size();vector<int>result(size,0);vector<int>sta;sta.push_back(0);for(inti=1;i<size;++i){......
  • 算法随想Day52【单调栈】| LC503-下一个更大元素Ⅱ、LC42-接雨水
    LC503.下一个更大元素Ⅱ对于“每日温度”,相当于对nums数组,进行了两次遍历。用i%size所得余数作为下标,且循环的圈数为size*2vector<int>nextGreaterElements(vector<int>&nums){intsize=nums.size();vector<int>result(size,-1);vector<int>sta;......
  • DOM元素的操作
           ......
  • html块级元素有哪些
    html块级元素有address、caption、dd、div、dl、dt、fieldset、form、h1、h2、h3、h4、h5、h6、hr、legend、fieldset、li、noframes、noscript、ol、ul、p、pre、table、tbody、td、tfoot、th、thead、tr等,其中,address用来定义地址。  一、html的块级元素<address>定义......
  • html块级元素有哪些
    html块级元素有address、caption、dd、div、dl、dt、fieldset、form、h1、h2、h3、h4、h5、h6、hr、legend、fieldset、li、noframes、noscript、ol、ul、p、pre、table、tbody、td、tfoot、th、thead、tr等,其中,address用来定义地址。  一、html的块级元素<address>定义......
  • 总结的面试题、数组下标为什么从0开始、数组名中存储的是什么、数组的元素如何存储
    系列文章目录文章目录系列文章目录第一题第二题第一题详细解答链接:https://mp.weixin.qq.com/s/N1Mj3DLbFkZeT5hVR05eNA第二题数组的存储:1、数组下标为什么从0开始?下标表示的是这个元素的位置距离首地址的偏移量2、数组名中存储的是什么数组名中存储的是数组在堆中一整块区域......
  • 点击某个元素查看有没有指定的父元素
    mounted(){document.addEventListener("click",(e)=>this.fintParent(e));},methods:{fintParent(e){constclickNode=e.srcElement;letparent=clickNode.parentNode;while(parent){if(......
  • python selenium 判断元素是否存在,实现:找到元素,执行对应的代码;找不到元素,继续执行其他
    selenium因为找不到元素会抛出异常,导致执行结束可以考虑使用driver.find_elements(),找不到元素时就会返回空列表,使用if-else语句,判断列表是否为空,非空,则正常找到元素,进行后续代码执行;空,则直接跳过,执行其他代码iflen(driver.find_elements())!=0#判断列表的长度是否为0......
  • 「高频必考」Docker&K8S面试题和答案
    先送福利:Go如何自动解压缩包?|文末送书Docker如何在Docker容器内部访问主机上的服务?可以通过设置主机网络模式,使用--net=host参数来访问主机上的服务。这样,容器和主机将共享一个网络命名空间,容器将可以直接访问主机上的服务。如何在Docker容器中运行多个进程?Docker推荐每个容......