2024.06.29 刷题日记

739. 每日温度

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

示例 1:

输入: temperatures = [73,74,75,71,69,72,76,73]
输出: [1,1,4,2,1,1,0,0]

示例 2:

输入: temperatures = [30,40,50,60]
输出: [1,1,1,0]

示例 3:

输入: temperatures = [30,60,90]
输出: [1,1,0]

这道题目可以用单调栈,栈中递减保存着数组下标,当当前值大于栈顶的时候,存进 ans,然后 pop;一直重复这个过程。然后 push 下标:

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {// 单调栈,;类似于消消乐int n = temperatures.size();stack<int> st;vector<int> ans(n, 0);for (int i = 0; i < n; i++) {while (!st.empty() && temperatures[st.top()] < temperatures[i]) {int p = st.top();st.pop();ans[p] = i-p;}st.push(i);}return ans;}
};

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

利用优先队列,当前队列存在着 k 个最大的元素,如果是小堆,堆顶就是第 K 大的元素:

class Solution {
public:int findKthLargest(vector<int>& nums, int k) {priority_queue<int, vector<int>, greater<int>> miniHeap;for (int num : nums) {miniHeap.emplace(num);if (miniHeap.size() > k) {miniHeap.pop();}}return miniHeap.top();}
};

347. 前 K 个高频元素

这个稍微有点复杂,和上一道题目类似,首先统计到 map,然后构建优先队列,队列中存储 pair<int,int>,按照 频率 进行排序。

最后将队列中元素全部弹出到答案就可以了:

class Solution {
public:vector<int> topKFrequent(vector<int>& nums, int k) {// 优于O(n log n),可以分步处理unordered_map<int, int> map;for (int num : nums) {map[num] += 1;}// 优先队列priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;for (auto& item : map) {pq.push(pair(item.second,item.first)); // (freq,value)if (pq.size() > k)pq.pop();}// 最终处理vector<int> ans;while (!pq.empty()) {ans.push_back(pq.top().second);pq.pop();}return ans;}
};

总结

1. 每日温度 (LeetCode 739)

此问题使用了单调栈的方法。单调栈是解决此类“下一个更大元素”问题的一个常见技术。通过维护一个从栈底到栈顶递减的栈,可以有效地找到每个元素右侧第一个更大的元素。

解法:
  • 使用一个栈来保存温度的索引。
  • 遍历温度数组,对于每个温度,如果当前温度大于栈顶索引对应的温度,则计算天数差并更新答案数组。
  • 将当前索引推入栈中,等待后续的比较。
  • 如果栈中剩余元素,对应的答案默认为0(已初始化)。

这种方法的时间复杂度是 O(n),因为每个元素最多入栈和出栈一次。

2. 数组中的第K个最大元素 (LeetCode 215)

此问题利用最小堆来解决。通过维护一个大小为 k 的最小堆,堆顶元素始终是当前遇到的第 k 大的元素。

解法:
  • 使用一个最小堆来保存最大的 k 个元素。
  • 遍历数组,将每个元素加入最小堆。
  • 如果堆的大小超过 k,则弹出堆顶元素(最小元素)。
  • 遍历完成后,堆顶元素即为第 k 大的元素。

这种方法的时间复杂度为 O(n log k),其中 n 是数组的长度。

3. 前 K 个高频元素 (LeetCode 347)

此问题首先使用一个哈希表来统计每个元素的频率,然后利用一个最小堆来找到频率最高的 k 个元素。

解法:
  • 使用一个哈希表来统计每个元素的频率。
  • 使用一个最小堆(存储频率和元素对)来维护最高频率的 k 个元素。
  • 遍历哈希表,将频率和元素的对推入最小堆。
  • 如果堆的大小超过 k,则弹出堆顶元素(频率最小的元素)。
  • 遍历完成后,将堆中的元素收集到结果数组。

这种方法的时间复杂度为 O(n log k),其中 n 是数组的长度。

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

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

相关文章

Linux下C/C++获得当前时间(秒/毫秒)

秒或者毫秒是根据当前时间到1970年1月1日计算&#xff0c;主要用于两个时间戳计算间隔时间 #include <iostream> using namespace std;#include <sys/time.h>int main() {struct timeval time_;gettimeofday(&time_, NULL);cout << time_.tv_sec <&…

【proteus 51单片机入门】8*8led点阵

文章目录 前言如何点亮led点阵仿真图代码点亮led核心代码解析 爱心代码 滚动总结 前言 在嵌入式系统的开发中&#xff0c;LED点阵显示器是一种常见的显示设备&#xff0c;它可以用来显示各种图形和文字&#xff0c;为用户提供直观的信息反馈。本文将介绍如何使用Proteus软件和…

使用 MongoDB 剖析开放银行:技术挑战和解决方案

开放银行&#xff08;或开放金融&#xff09;在银行业掀起了一股颠覆性浪潮&#xff0c;它迫使金融机构&#xff08;银行、保险公司、金融科技公司、企业甚至政府机构&#xff09;迎接一个透明、协作和创新的新时代。这种模式转变要求银行与第三方提供商&#xff08;TPP&#x…

如何在 SQL 中删除一条记录?

如何在 SQL 中删除一条记录&#xff1f; 在 SQL 中&#xff0c;您可以使用DELETE查询和WHERE子句删除表中的一条记录。在本文中&#xff0c;我将向您介绍如何使用DELETE查询和WHERE子句删除记录。我还将向您展示如何一次从表中删除多条记录 如何在 SQL 中使用 DELETE 这是使…

【计算机图形学】期末考试知识点汇总(上)

文章目录 视频教程第一章 计算机图形学概述计算机图形学的定义计算机图形学的应用计算机图形学 vs 图像处理 vs模式识别图形显示器的发展及工作原理理解三维渲染管线 第二章 基本图元的扫描转换扫描转换直线的扫描转换DDA算法Bresenham算法中点画线算法圆的扫描转换中点画圆算法…

react项目实现语音识别功能

需要调用后端接口将录音文件传给后端&#xff0c;由后端将录音内容转换成文字返回给前端&#xff0c;当然也有一些插件可以实现语音转文字功能&#xff0c;可以自行查找使用插件实现方法 有注释版本&#xff0c;下面还有 一个无注释版本。 import React, { useState, useEffe…

面试-J.U.C包的梳理

1.J.U.C包的梳理 Java.Util.Concurrent包简称JUC (1)JUC整体架构图 (2)分析 Executor&#xff1a;线程执行器&#xff0c;任务执行和调度的框架。Tools下存在executor相关的executors类&#xff0c;用于创建executorservice&#xff0c;scheduleexecutorservice&#xff0c;…

互斥锁(Mutex)和条件变量(Condition Variable)的作用

互斥锁&#xff08;Mutex&#xff09;的作用 互斥锁&#xff08;Mutex&#xff0c;全称Mutual Exclusion Lock&#xff09;是一种用于多线程编程中的同步原语&#xff0c;其主要作用是确保在任何给定时间只有一个线程可以访问共享资源&#xff0c;以避免多个线程同时对共享资源…

哪吒汽车,正在等待“太乙真人”的拯救

文丨刘俊宏 在360创始人、哪吒汽车股东周鸿祎近日连续且着急的“督战”中&#xff0c;哪吒汽车&#xff08;下简称哪吒&#xff09;终究还是顶不住了。 6月26日&#xff0c;哪吒通过母公司合众新能源在港交所提交了IPO文件&#xff0c;急迫地希望成为第五家登陆港股的造车新势力…

高精度除法的实现

高精度除法与高精度加法的定义、前置过程都是大致相同的&#xff0c;如果想了解具体内容&#xff0c;可以移步至我的这篇博客&#xff1a;高精度加法计算的实现 在这里就不再详细讲解&#xff0c;只讲解主体过程qwq 主体过程 高精度除法的原理和小学学习的竖式除法是一样的。 …

【Sklearn-驯化】一文搞懂机器学习树模型建模可视化过程

【Sklearn-驯化】一文搞懂机器学习树模型建模可视化过程 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档关注&#xff…

OpenCV学习之cv2.imshow()函数

OpenCV学习之cv2.imshow()函数 一、简介 cv2.imshow 是 OpenCV 库中用于显示图像的基本函数之一。在图像处理和计算机视觉的过程中&#xff0c;使用该函数可以快速预览处理后的图像&#xff0c;便于调试和结果展示。 二、基本语法 cv2.imshow(WindowName, Imgmat)三、参数说…

如何制作鼠标悬浮后伸缩的搜索框

引言 许多博客都在使用的伸缩搜索框制作教程 成品展示&#xff08;颜色自行搭配&#xff09; 初步布局 居中盒子&&初始化样式 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewpo…

2SK241 LTSpice模型及仿真

2SK241是东芝生产的一款NMOS&#xff0c;早已停产&#xff0c;但是在收音机圈子里还是有很多死忠粉&#xff0c;所以在淘宝上也是一堆打磨改标的假货。 言归正传&#xff0c;在矿坛上找到了2SK241的模型&#xff1a; .model M2SK241bottom NMOS(Level1 Rd1 Rs10 Rg50 Kp8mV…

在高并发场景下,怎样避免 PostgreSQL 的死锁问题?

文章目录 &#xff08;一&#xff09;不当的事务设计&#xff08;二&#xff09;不正确的锁使用&#xff08;三&#xff09;并发操作冲突&#xff08;一&#xff09;优化事务设计&#xff08;二&#xff09;正确使用锁&#xff08;三&#xff09;调整数据库参数&#xff08;四&…

mindspore打卡第9天 transformer的encoder和decoder部分

mindspore打卡第9天 transformer的encoder和decoder部分 import mindspore from mindspore import nn from mindspore import ops from mindspore import Tensor from mindspore import dtype as mstypeclass ScaledDotProductAttention(nn.Cell):def __init__(self, dropout_…

2024年6月29日 (周六) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键&#xff0c;实现一键唤起、一键隐藏的 Windows 工具&#xff0c;并且支持窗口动态绑定快捷键&#xff08;无需设置自动实现&#xff09;。 喜马拉雅下载工具: 字面意思 《星刃》性感女主私密部位细节逼真 让玩家感到惊讶《星刃…

clion ctrl+左键只能跳转到虚函数的声明处

右击函数 -> GOTO -> Definition 这样不够便捷&#xff0c;但是我没有找到更好的办法 可能是因为该函数是虚函数的重写&#xff0c;clion 无法识别出该函数是虚函数的哪个重写版&#xff0c;只能跳转到唯一的虚函数位置

springboot注解@ComponentScan注解作用

一 ComponentScan作用 1.1 注解作用 项目会默认扫描SpringBootApplication注解所在路径的同级和下级的所有子包&#xff0c;使用ComponentScan后他会取代掉默认扫描。 ComponentScan 是Spring框架的注解&#xff0c;它的作用是扫描指定的包路径下的标有 Component、Service、…

力扣300. 最长递增子序列(动态规划)

Problem: 300. 最长递增子序列 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 明确题目涉及到求取最值问题因此我们可以考虑使用动态规划来解决问题 1.定义状态&#xff1a;定义int类型的dp数组表示以nums[i]结尾的序列的最长长度&#xff0c;初始化均为1即表示…