首页 > 其他分享 >代码随想录:前K个高频元素

代码随想录:前K个高频元素

时间:2024-12-16 21:32:01浏览次数:4  
标签:map target int 代码 随想录 vector que 高频

代码随想录:前K个高频元素

这个逼优先队列是真不好写啊。

代码从上到下说吧,首先是map,原来这个map能用索引啊,map[i],i即指的键值,而且默认键值对的值是0。

然后说这个优先队列,我只能说以后不想叫这玩意儿队列,因为这玩意儿一来不是个队列,一般是vector做底层,二来使用规范和queue也不一样,是用top的。以后干脆还是叫大根堆小根堆。

然后来讲比较函数,这玩意更是纯逆天,堆排序中默认是大根堆,即less。如果你自己想写比较函数,那你可有罪受了。要重载一个类的operator

class compare{
	operator()(int a,int b)
};

比较函数的含义是,如果第一个元素的优先级在第二个之前,则返回true,如a>b的意思就是,a>b时a的优先级更高,即降序排列。

不过您猜怎么着,这个b堆排序因为底层实现的原因,是反过来的,a>b的时候降序,反而是几把小根堆。

只能说,希望之后别用到这玩意儿。

代码不难如下:

class Solution {
public:
    class compare {
    public:
        bool operator()(pair<int, int> a, pair<int, int> b) {
            return a.second > b.second;
        }
    };
    vector<int> topKFrequent(vector<int>& nums, int k) {
        unordered_map<int, int> target;
        for (int num : nums) {
            auto it = target.find(num);
            if (it != target.end()) {
                it->second++;
            } else {
                target.insert(make_pair(num, 1));
            }
        }

        // 哎这b比较函数太不好写了
        priority_queue<pair<int, int>, vector<pair<int, int>>, compare> que;

        for(auto it:target){
            que.push(it);
            if(que.size()>k){
                que.pop();
            }
        }

        vector<int> res;
        while(!que.empty()){
            res.push_back(que.top().first);
            que.pop();
        }
        return res;
    }
};

标签:map,target,int,代码,随想录,vector,que,高频
From: https://www.cnblogs.com/huigugu/p/18611152

相关文章

  • 代码审计之Fastjson
    写一个demopackagecn.anger.fastjsontest.demos.web;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;publicclassFastjsonController{publicstaticvoidmain(String[]args){//利用Fastjson去解析变量数据......
  • 注意力机制分类、详解及代码复现
    定义与起源注意力机制源于对人类视觉系统的深入研究,模拟了人类大脑在处理海量信息时的选择性关注能力。这一机制使神经网络能够在处理复杂输入时,自动识别并聚焦于最关键的部分,从而提高模型的性能和泛化能力。通过这种方式,注意力机制有效解决了信息过载的问题,在计算资源受......
  • 分布式锁代码编写问题分析
     先给大家一段代码示例:@AutowiredRedissonredisson;@GetMapping("/modifyInfo/{id}")publicResultmodifyInfo(@PathVariableStringid){StringlockKey=RedisLockConstant.ERP_CLUE_LOCK+id;RLockrLock=redisson.getLo......
  • 计算赤纬、时角与理论太阳可照时数(附代码)
    基于Python的可照时数的计算_可照时数的微机计算程序-CSDN博客这篇博客帮我初期找到了计算方向,但他用于计算赤纬(θ)和时角(w)的公式来历比较奇怪,没有沿用。(一)代码frommathimport*defpossibleSunshineDuration(N,lat_deg):""":paramN:日数(N):paramlat_deg:纬度......
  • Python生成雪花、代码雨、绝美圣诞树!?
    下面给大家发一些有趣不知道的Python代码,超级有趣,快去试试!日常放松一下,给爱的人发过去吧!1、绘制分形图形(以科赫雪花为例)importturtledefkoch(t,order,size):iforder==0:t.forward(size)else:foranglein[60,-120,60,0]:......
  • 使用wsimport命令生成webService客户端代码
    wsimport 是JDK自带的一个工具,可以根据WSDL文件生成Java类。1.进入JDK/bin目录,从地址栏进入cmd 2.执行如下命令:wsimport-keep-sD:\tmp-pcom.cn.phone-verbosehttp://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl-keep:是否生成java源文件-s:指定.ja......
  • 用腾讯云AI代码助手开发一款数据库敏感信息检查工具
    引言作为一个优秀的IT技术民工,需要始终学习先进的技术并将技术转换为生产力,目前AI领域编码辅助工具层出不穷,开发者有必要或者说必须要掌握相关工具的使用,以提高编码效率,降低编码错误。这次我通过一个简单的项目和大家分享一下腾讯云AI代码助手的使用。AI开发实践开发环......
  • cordova-plugin-wechat实现微信登录授权,我本地打包可以拉起微信并进入授权成功回调函
    经过打包了很多次的测试,发现问题出在了cordova版本上,之前因为需要降低node.js的版本,重新安装了cordova为最新版本12.0.0,在这个环境下,我打包出来的签名包可以正常拉起微信并进入授权成功回调函数。之前开发配置的cordova版本是11.1.0,这个版本打出来的包就是可以拉起微信,但进入去授......
  • 代码随想录算法训练营第四十八天|739.每日温度、496.下一个更大元素、503.下一个更大
    1leetcode739.每日温度题目链接:739.每日温度-力扣(LeetCode)文章链接:代码随想录视频链接:单调栈,你该了解的,这里都讲了!LeetCode:739.每日温度哔哩哔哩bilibili思路:就真的是暴力搜索来写这道题目,但是呢,有些示例里面就超时了,至少有点思路了吧,也算是好消息1.1自己的方法能......
  • 代码随想录算法训练营第四十六天|leetcode647. 回文子串、leetcode516.最长回文子序列
    1leetcode647.回文子串题目链接:647.回文子串-力扣(LeetCode)文章链接:代码随想录视频链接:动态规划,字符串性质决定了DP数组的定义|LeetCode:647.回文子串哔哩哔哩bilibili思路:嘿,看不懂有一点,看解析吧1.1视频后的方法其实看完视频以后,感觉这个题目真的不难,我想到了二维......