Leetcode 3.26

Leetcode Hot 100

  • 一级目录
    • 1.每日温度
    • 1.数组中的第K个最大元素
      • 知识点:排序复杂度
      • 知识点:堆的实现
    • 2.前 K 个高频元素
      • 知识点:优先队列

一级目录

1.每日温度

每日温度
思路是维护一个递减栈,存储的是当前元素的位置。

  1. 遍历整个数组,如果栈不空,且当前数字大于栈顶元素,那么需要pop出栈顶元素,由于当前数字大于栈顶元素的数字,而且一定是第一个大于栈顶元素的数,直接求出下标差就是二者的距离。
  2. 继续看新的栈顶元素,重复步骤一,直到当前数字小于等于栈顶元素停止,然后将数字入栈,这样就可以一直保持递减栈,且每个数字和第一个大于它的数的距离也可以算出来。

step 1:
在这里插入图片描述
step 2:
在这里插入图片描述
在这里插入图片描述

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {stack<int> stk;//都置为0,处理边界情况vector<int> ans(temperatures.size(), 0);for (int i = 0; i < temperatures.size(); i++) {if (stk.empty()) {//为空则直接入栈,存储的是元素的位置stk.push(i);} else {//比栈顶元素大while (!stk.empty() && temperatures[i] > temperatures[stk.top()]) {//栈顶元素出栈auto site = stk.top();stk.pop();//记录差值ans[site] = i - site;}//当前元素入栈stk.push(i);}}return ans;}
};

1.数组中的第K个最大元素

数组中的第K个最大元素
第K个最大元素用堆做比较容易,可以维护一个只有K个元素的大根堆,如果元素个数超过K则pop,也就是将堆顶大元素删除,那么当前堆就是一个以第K大元素为堆顶的大根堆。堆可以用priority_queue实现。

class Solution {
public:int findKthLargest(vector<int>& nums, int k) {priority_queue<int, vector<int>, greater<int>> pq;for (auto &n : nums) {pq.push(n);while (pq.size() > k) {pq.pop();}}return pq.top();}
};

知识点:排序复杂度

各种排序的复杂度需要烂熟于心:
在这里插入图片描述

知识点:堆的实现

当然在面试中,面试官更倾向于让更面试者自己实现一个堆。所以建议掌握这里大根堆的实现方法,在这道题中尤其要搞懂「建堆」、「调整」和「删除」的过程。

class Solution {
public:void maxHeapify(vector<int>& a, int i, int heapSize) {int l = i * 2 + 1, r = i * 2 + 2, largest = i;if (l < heapSize && a[l] > a[largest]) {largest = l;} if (r < heapSize && a[r] > a[largest]) {largest = r;}if (largest != i) {swap(a[i], a[largest]);maxHeapify(a, largest, heapSize);}}void buildMaxHeap(vector<int>& a, int heapSize) {for (int i = heapSize / 2; i >= 0; --i) {maxHeapify(a, i, heapSize);} }int findKthLargest(vector<int>& nums, int k) {int heapSize = nums.size();buildMaxHeap(nums, heapSize);for (int i = nums.size() - 1; i >= nums.size() - k + 1; --i) {swap(nums[0], nums[i]);--heapSize;maxHeapify(nums, 0, heapSize);}return nums[0];}
};

2.前 K 个高频元素

前 K 个高频元素

  1. 将数组放入unorderd_map<int, int> mp中,记录各元素对应出现的次数
  2. 将mp中的次数堆排,按照大根堆排序
  3. 最终将前K个元素放入vector中

知识点:优先队列

本题难点在于priority_queue的相关知识,如何自定义比较方式等。比如本题的数据类型并不是基本数据类型,而是pair<int, int>,所以需要自定义比较方式

        struct myComparision {bool operator() (pair<int, int> &p1, pair<int, int> &p2) {return p1.second < p2.second;}};

代码实现:

class Solution {
public:vector<int> topKFrequent(vector<int>& nums, int k) {unordered_map<int, int>mp;vector<int> ans;for (auto& n: nums) {mp[n]++;}//用仿函数自定义比较方式,大根堆是小于struct myComparision {bool operator() (pair<int, int> &p1, pair<int, int> &p2) {return p1.second < p2.second;}};priority_queue <pair<int, int>, vector<pair<int, int>>, myComparision> pq;for (auto &a: mp) {pq.push(a);}while (k--) {ans.push_back(pq.top().first);pq.pop();}return ans;}};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/571048.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iphone11promax硬件参数

1.截图 2.震动和静音方面还是不行的 3.相关的电子参数信息 4.出处 【苹果iPhone 11 Pro Max 4GB/64GB/全网通参数】Apple iPhone 11 Pro Max 4GB/64GB/全网通手机参数_规格_性能_功能-ZOL中关村在线

批量删除 rabbitmq中随机队列

批量删除 amq.gen–* 随机队列 操作错误产生了无效随机队列&#xff0c;需要批量删除 过滤列出指定amq.gen–队列 # 列出 指定 vhost/qq 以amq.gen开头的所有队列 rabbitmqctl list_queues --vhost / | grep ^amq.gen-# 批量删除队列 #由于list_queues会列出队列名称以及对应…

2022 年甘肃省职业院校技能大赛 高职组 网络系统管理竞赛 网络构建模块试题

2022 年甘肃省职业院校技能大赛 高职组网络系统管理竞赛 网络构建模块试题 目 录 考试说明… 3 任务描述… 3 任务清单… 3 &#xff08;一&#xff09;基础配置… 3 &#xff08;二&#xff09;有线网络配置… 4 &#xff08;三&#xff09;无线网络配置… 6 &#xff08;四&a…

找茬游戏小程序源码系统:封面广告+插屏广告 自带流量主低成本 带完整的安装代码包以及搭建教程

近年来&#xff0c;小程序市场持续火爆&#xff0c;各类小程序层出不穷。找茬游戏小程序作为其中的一种&#xff0c;以其独特的游戏形式和良好的用户体验&#xff0c;吸引了大量用户。然而&#xff0c;对于许多开发者和商家来说&#xff0c;开发一款高质量的找茬游戏小程序并非…

ArcGIS二次开发(一)——搭建开发环境以及第一个简单的ArcGIS Engine 程序

Arcgis10.2、Arcgis Engine10.2与Microsoft Visual Studio 2012的版本进行安装 1、推荐教程与安装包2、安装顺序3、安装成功测试VS新建项目可以创建ArcGIS项目&#xff0c;并且在VS中拖拽ArcGIS工具 4、搭建第一个简单的ArcGIS Engine 程序 ArcEngine和VS版本是有对应的&#x…

让你的Mac重焕新生!CleanMyMac X软件2024全面评测

让你的Mac重焕新生&#xff01;CleanMyMac X全面评测&#xff1a;一招解决卡顿、内存不足等问题&#xff0c;让你的Mac速度飞起来&#xff01; 在当今数字化时代&#xff0c;我们的生活和工作中离不开电脑的支持。 而对于Mac用户来说&#xff0c;如何保持电脑的流畅运行和高效…

【第二部分--Python之基础】02

二、运算符与程序流程控制 1、运算符 1.1 算术运算符 算术运算符用于组织整数类型和浮点类型的数据&#xff0c;有一元运算符和二元运算符之分。 一元算术运算符有两个&#xff1a;&#xff08;正号&#xff09;和-&#xff08;负号&#xff09;&#xff0c;例如&#xff1…

Prototype

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网. 题目&#xff1a; 样例&#xff1a; 输入 168 输出 42 思路&#xff1a; 根据题意&#xff0c; 吸收怪物是 w * n &#xff0c;其中 怪物 n 一定是质数&#xff0c;并且 AlexMercer 可以变成 w 的任一因子。 从中…

赋能工业智能化升级 | 基于ACM32 MCU的工业通用变频器方案

近年来&#xff0c;随着智能制造对节能的更高要求&#xff0c;通用变频器在工业领域的应用愈加广泛。变频器是一种先进的调速控制设备&#xff0c;通过对电源频率的控制可以实现对电机转速的精确调节&#xff0c;从而提高设备的性能和节能效果。 01 变频器概述 变频器&#xf…

Prometheus(六):Blackbox监控安装配置

目录 1 Blackbox Exporter安装配置1.1 Blackbox Exporter简介1.2 安装1、安装-使用源码包安装下载安装blackbox.yml文件配置快速启动文件 2、安装-使用docker 1.3 Prometheus配置1、http监控2、ping探测-ip3、https probe-DNS解析4、metrics配置5、TCP监控-探测端口 总结 1 Bla…

零基础机器学习(4)之线性回归的基本原理

文章目录 一、线性回归的基本原理1.相关与回归2.线性回归的原理分析①线性回归的一般公式②线性回归的损失函数③线性回归方程的参数求解方法A.最小二乘法B.梯度下降法 一、线性回归的基本原理 1.相关与回归 相关描述的是变量之间的一种关系。 从统计角度看&#xff0c;变量之…

【氮化镓】镁激活退火对p-GaN迁移率和阈值电压的影响

【Mg activation anneal of the p-GaN body in trench gate MOSFETs and its effect on channel mobility and threshold voltage stability】 文献总结&#xff1a; 本研究探讨了在沟道栅MOSFETs中&#xff0c;镁&#xff08;Mg&#xff09;激活退火步骤对p型氮化镓&#xf…