当前位置: 首页 > news >正文

刷题第10天

代码随想录刷题第10天 |● 239. 滑动窗口最大值 ● 347.前 K 个高频元素

239. 滑动窗口最大值

唉,好难,先记个思路吧
class Solution {
private:class MyQueue { //单调队列(从大到小)public:deque<int> que; // 使用deque来实现单调队列// 每次弹出的时候,比较当前要弹出的数值是否等于队列出口元素的数值,如果相等则弹出。// 同时pop之前判断队列当前是否为空。void pop(int value) {if (!que.empty() && value == que.front()) {que.pop_front();}}// 如果push的数值大于入口元素的数值,那么就将队列后端的数值弹出,直到push的数值小于等于队列入口元素的数值为止。// 这样就保持了队列里的数值是单调从大到小的了。void push(int value) {while (!que.empty() && value > que.back()) {que.pop_back();}que.push_back(value);}// 查询当前队列里的最大值 直接返回队列前端也就是front就可以了。int front() {return que.front();}};
public:vector<int> maxSlidingWindow(vector<int>& nums, int k) {MyQueue que;vector<int> result;for (int i = 0; i < k; i++) { // 先将前k的元素放进队列que.push(nums[i]);}result.push_back(que.front()); // result 记录前k的元素的最大值for (int i = k; i < nums.size(); i++) {que.pop(nums[i - k]); // 滑动窗口移除最前面元素que.push(nums[i]); // 滑动窗口前加入最后面的元素result.push_back(que.front()); // 记录对应的最大值}return result;}
};

前 K 个高频元素

看到出现的次数 就可以想到哈希表了,但是那个小顶堆完全没用过,难顶,语法都有点懵
class Solution {
public:// 小顶堆class mycomparison {public:bool operator()(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; // map<nums[i],对应出现的次数>for (int i = 0; i < nums.size(); i++) {map[nums[i]]++;}// 对频率排序// 定义一个小顶堆,大小为kpriority_queue<pair<int, int>, vector<pair<int, int>>, mycomparison> pri_que;// 用固定大小为k的小顶堆,扫面所有频率的数值for (unordered_map<int, int>::iterator it = map.begin(); it != map.end(); it++) {pri_que.push(*it);if (pri_que.size() > k) { // 如果堆的大小大于了K,则队列弹出,保证堆的大小一直为kpri_que.pop();}}// 找出前K个高频元素,因为小顶堆先弹出的是最小的,所以倒序来输出到数组vector<int> result(k);for (int i = k - 1; i >= 0; i--) {result[i] = pri_que.top().first;pri_que.pop();}return result;}
};
http://www.lryc.cn/news/312047.html

相关文章:

  • Bililive-go 实现直播自动监控录制
  • 【Redis】Redis持久化模式RDB
  • Java基础 - 模拟医院挂号系统
  • 【论文精读】基于知识图谱关系路径的多跳智能问答模型研究
  • uni app 微信小程序微信支付
  • Dgraph 入门教程一《 概览》
  • VSCode安装
  • STM32各外设初始化步骤
  • 10. Nginx进阶-Return
  • Nircmd集成定时执行专家之后的使用场景
  • Java面试题【必知必会】Linux常用命令面试题(2024)
  • 元宇宙融合多功能气膜馆:开启娱乐与文化的数字新纪元
  • 微信小程序本地开发
  • 2024火爆全网系列,原来RocketMQ中间件可以这么玩
  • 2024阿里、网易、京东等大厂最新Java面试题,一举拿下腾讯美团滴滴offer
  • 我的创作纪念日(2024.3.6)
  • SpringBoot实战(1)
  • Dgraph 入门教程二《 快速开始》
  • 文件上传{session文件包含以及条件竞争、图片文件渲染绕过(gif、png、jpg)}
  • 【论文精读】Mask R-CNN
  • vue + js 项目打包JS、CSS文件自动部署到oss
  • CSS:让动画流畅生动的缓动函数
  • 蓝桥杯集训·每日一题2024 (差分)
  • 嵌入式通信数据经常说的大端和小端模式(学习)
  • bun 单元测试
  • 阿里云2核4G服务器支持多少人同时在线?
  • 浏览器发出一个请求到收到响应步骤详解
  • 121. 买卖股票的最佳时机【leetcode】/动态规划
  • K8S Service相关概念
  • 小米消金剖析“冒充老板”诈骗案例,呼吁群众提高反诈意识