代码随想录算法训练营Day53|739.每日温度、496.下一个最大元素I、503.下一个更大元素II

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

每日温度

代码随想录 (programmercarl.com)

暴力求法

        内外两层遍历数组,外层i表示返回的数组的下标,内层表示比当前i大的温度数组的下标。具体代码如下,会超时。

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        // 初始化一个和 temperatures 大小相同的向量 ans,所有值初始为0
        vector<int> ans(temperatures.size(), 0);
        // 遍历 temperatures 数组
        for (int i = 0; i < temperatures.size(); i++) {
            // 初始化 next 为0,用于记录需要等待的天数
            int next = 0;
            // 从当前元素之后开始遍历,寻找更高的温度
            for (int j = i + 1; j < temperatures.size(); j++) {
                // 每遍历一个元素,等待的天数加一
                next++;
                // 如果找到了一个更高的温度
                if (temperatures[j] > temperatures[i]) {
                    // 将等待的天数赋值给 ans 在当前位置的元素
                    ans[i] = next;
                    // 找到了更高的温度,跳出内层循环
                    break;
                }
            }
        }
        // 返回计算出的等待天数数组
        return ans;
    }
};

算法时间复杂度为O(n^2),空间复杂度为O(n)。

单调栈

想要更好了解单调栈,可以考虑看看下面的博客

算法数据结构——关于单调栈(Monotone Stack)的详细讲解及应用案例-优快云博客

关于本题的单调栈解法

单调栈,你该了解的,这里都讲了!LeetCode:739.每日温度_哔哩哔哩_bilibili

单调栈记录遍历过的元素的下标

建议从左到右遍历元素

查找比当前元素大的元素使用单调递增栈,查找比当前元素小的元素使用单调递减栈

从左侧查找看插入栈的栈顶元素,从右侧查找就看弹出栈时即将插入的元素。

本题查找下一个更大的元素,使用单调递增栈,创建一个ans数组。遍历数组元素时,比较栈顶索引和当前数组遍历索引的大小,若当前栈顶索引在数组中元素大于等于当前遍历的元素,将栈顶元素值i在ans数组中的值变为遍历的元素索引减去i.

ans[i] = current - i;

当栈非空时且栈顶索引的元素大于当前遍历元素时,继续,否则将当前遍历的索引下标current传入单调栈中。

当当前栈顶索引在数组中元素小于当前遍历的元素时,直接入栈即可。

具体代码如下。

class Solution {
public:
    // dailyTemperatures 函数计算每个温度之后更高温度需要等待的天数
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        // 初始化一个栈,用于存储温度数组中的索引
        stack<int> stack;
        // 将第一个元素的索引推入栈中
        stack.push(0);
        // 初始化一个和 temperatures 大小相同的向量 ans,所有值初始为0
        vector<int> ans(temperatures.size(), 0);
        // 遍历 temperatures 数组,从索引1开始
        for (int i = 1; i < temperatures.size(); i++) {
            // 如果当前温度小于等于栈顶索引对应的温度
            if (temperatures[i] <= temperatures[stack.top()]) {
                // 将当前索引推入栈中
                stack.push(i);
            } else if (temperatures[i] > temperatures[stack.top()] && !stack.empty()) {
                // 如果当前温度大于栈顶索引对应的温度,且栈不为空
                // 循环直到栈为空或者当前温度不再大于栈顶索引对应的温度
                while (!stack.empty() && temperatures[i] > temperatures[stack.top()]) {
                    // 弹出栈顶元素
                    int pop = stack.top();
                    // 计算等待天数,并赋值给 ans 在栈顶索引位置的元素
                    ans[pop] = i - pop;
                    // 弹出栈顶元素
                    stack.pop();
                }
                // 将当前索引推入栈中
                stack.push(i);
            }
        }
        // 返回计算出的等待天数数组
        return ans;
    }
};

算法的时间复杂度和空间复杂度均为O(n)。

下一个更大元素I

496. 下一个更大元素 I - 力扣(LeetCode)

本题和上题类似,注意两点,一是求的下一个大于当前元素的元素,二考虑到元素各不相同且为了便于查找,考虑使用哈希表。具体代码如下。

class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        // 初始化一个哈希表,用于存储nums2中每个元素的下一个更大元素
        unordered_map<int, int> hashmap;
        // 初始化一个和 nums1 大小相同的向量 ans,所有值初始为-1
        vector<int> ans(nums1.size(), -1);
        // 初始化一个栈,用于存储nums2的索引
        stack<int> stack;
        stack.push(0);
        // 遍历 nums2 数组
        for (int i = 0; i < nums2.size(); i++) {
            // 如果当前元素小于等于栈顶索引对应的元素
            if (nums2[i] <= nums2[stack.top()]) {
                // 将当前索引推入栈中
                stack.push(i);
            } else {
                // 如果当前元素大于栈顶索引对应的元素
                while (!stack.empty() && nums2[i] > nums2[stack.top()]) {
                    // 弹出栈顶元素
                    int pop = stack.top();
                    // 将当前元素作为栈顶元素的下一个更大元素存储在哈希表中
                    hashmap[nums2[pop]] = nums2[i];
                    // 弹出栈顶元素
                    stack.pop();
                }
                // 将当前索引推入栈中
                stack.push(i);
            }
        }
        // 清空栈,将剩余元素的下一个更大元素设置为-1
        while (!stack.empty()) {
            int pop = stack.top();
            hashmap[nums2[pop]] = -1;
            stack.pop();
        }
        // 遍历 nums1 数组,根据哈希表构建答案
        for (int i = 0; i < nums1.size(); i++) {
            ans[i] = hashmap[nums1[i]];
        }
        // 返回计算出的下一个更大元素的数组
        return ans;
    }
};

算法的时间复杂度为O(m+n),m、n分别为两个数组的长度,空间复杂度为O(m+n),组成分别为哈希表n、ans数组m和栈n。

下一个更大元素II

. - 力扣(LeetCode)

和第一题思路类似,但由于是可以循环查找,有三个点需要注意,

首先是遍历数组从0-2*nums.size()-1,其次对下标采取取模的操作进行栈的插入等操作,最后是本题求的是下一个大于当前元素的元素,所以不是ans数组中的不是下标,而是元素。

class Solution {
public:
    // nextGreaterElements 函数找到每个元素右边第一个比它大的元素
    vector<int> nextGreaterElements(vector<int>& nums) {
        // 获取数组的大小
        int n = nums.size();
        // 初始化一个和 nums 大小相同的向量 ans,所有值初始为-1
        vector<int> ans(nums.size(), -1);
        // 初始化一个栈,用于存储数组索引
        stack<int> st;
        // 将0推入栈中
        st.push(0);
        // 遍历 nums 数组,循环两次数组长度减一,模拟循环数组
        for (int i = 1; i < 2 * nums.size() - 1; i++) {
            // 计算循环数组的索引
            int index = i % n;
            // 如果当前元素小于等于栈顶索引对应的元素
            if (nums[index] <= nums[st.top()]) {
                // 将当前索引推入栈中
                st.push(index);
            } else {
                // 如果当前元素大于栈顶索引对应的元素
                while (!st.empty() && nums[index] > nums[st.top()]) {
                    // 弹出栈顶元素
                    int pop = st.top();
                    // 将当前元素赋值给 ans 在栈顶索引位置的元素
                    ans[pop] = nums[index];
                    // 弹出栈顶元素
                    st.pop();
                }
                // 将当前索引推入栈中
                st.push(index);
            }
        }
        // 返回计算出的下一个更大元素的数组
        return ans;
    }
};

算法的时间复杂度为O(n),空间复杂度也是O(n)。

基于WEB的报价管理系统的设计与实现 该系统采用B/S模式,后台运用SpringMVC和MyBatis搭建,利用MySQL数据库,来组织存储和管理数据,使用tomcat服务器向外提供服务。使用该系统对外有利于提高企业的综合竞争力,对内有利于提高成本管理和控制的水平,简化了报价流程、提高了工作效率、精简了报价机构,降低了成本。研究和掌握必要的信息采集和数据查询技术,是各个企业,事业单位信息化的一个重要标志。当前大多数企业采取的报价方式仍然是用EXCEL表格和人工的方式,这不仅不利于大量数据的总结,更不利于对销售利润的控制。 阅读详情

相关推荐

手把手教你用示波器实测LVDS/CML信号:从波形解读到故障排查(附实测图)

本文详细介绍了如何使用示波器实测LVDS和CML信号,从波形解读到故障排查的全过程。涵盖差分探头选择、示波器配置、标准波形特征解读、眼图分析技巧以及高速信号捕获要点,帮助硬件工程师快速诊断和解决信号完整性问题。附实测图和案例,提升高速数字电路设计效率。

weixin_27215337的博客 198

【代码随想录】【算法训练营】【第53天】 [739]每日温度 [496]下一个更大元素I [503]下一个更大元素II

思路及算法思维,指路。题目来自。day 48,周六,不能再坚持~

day day up 422

pytorch中的wheel文件

whl 文件是 Python 的一个软件包分发格式,用于在 Python 中安装软件包。它是 Python Wheel 的缩写,也被称为 wheel 文件。这种文件格式旨在简化 Python 软件包的安装和分发。对于 PyTorch 而言,它提供了预编译的 .whl 文件,您可以通过 pip 安装这些文件来快速方便地安装 PyTorch。这些 .whl 文件是已经编译好的二进制分发文件,可以直接安装在您的 Python 环境中,而无需再进行编译。

bj_zhb的博客 3125

代码随想录算法训练营DAY53| 739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II

【代码】代码随想录算法训练营DAY53| 739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II。

Greeneril_的博客 366

AutoDL上传数据详细步骤(自己用的步骤,可能没有其他大佬用的那么高级)

AutoDL上传数据详细步骤(自己用的步骤,可能没有其他大佬用的那么高级)

孟孟单单的博客 7万+

SVPWM分析、各个扇区详细计算以及Matlab仿真

SVPWM分析以及各个扇区详细计算以及Matlab仿真说明目的两电平逆变器拓扑空间矢量扇区判断扇区内如何发波?矢量作用时间计算矢量切换时间的计算Simulink仿真/基于Matlab-R2014a版本 说明 第一次发文章,不太会用Markdown,word编辑的公式复制过来有些是乱码,因此都贴图了。 另外,本文公式和图片比较多,编辑工作量比较大,比较辛苦,转载的话,请注明出处,谢谢。 目的 由于在...

michaelf的博客 12万+

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 15

PyTorch、Torchvision、Torchaudio历史版本whl文件下载地址、版本对应关系与离线安装全攻略

本文详细解析了PyTorch、Torchvision和Torchaudio历史版本whl文件的下载地址、版本对应关系及离线安装全攻略。针对无网络环境下的安装挑战,提供了官方whl文件获取路径、版本匹配技巧和完整安装流程,帮助开发者高效解决兼容性问题,确保深度学习环境的稳定部署。

weixin_31960565的博客 378

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 437

C# 的 Dapper 库高级进阶:刨根问底的深度解析

通过今天的探索,我们了解了 Dapper 的一些高级功能,包括如何处理复杂的查询、执行批量操作以及如何优化性能。希望这篇深入浅出的文章能帮助你在实际项目中更好地运用 Dapper!🎈好了,小伙伴们,今天的分享就到这里啦!如果你有任何疑问或者想要分享自己的经验,请在评论区留言。我们下次再见!👋上述示例代码仅供参考,实际使用时请根据项目需求进行适当调整。✨Dapper 官方文档Dapper 性能优化指南Dapper 动态参数使用来同时执行多个查询。利用Execute和Query方法来简化 SQL 调用。

java专栏 812

化工过程设计软件:Aspen Plus二次开发_(2).二次开发概述

假设我们需要创建一个自定义的换热器模型,该模型能够计算两个物流之间的热交换量,并根据传热系数和换热面积进行调整。ACM 模型代码示例!自定义换热器模型!参数:传热系数 U (W/m^2·K)!换热面积 A (m^2)!热物流 T_hot_in (K), T_hot_out (K), F_hot (kmol/h)!冷物流 T_cold_in (K), T_cold_out (K), F_cold (kmol/h)!模型输入!U - 传热系数!A - 换热面积!

kkchenjj的博客 367

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 362

视图库对接系列(GA-T 1400)四、视图库对接系列(本级)注册

在之前的步骤中,我们已经把项目大体的架构已经写出来了。那我们就来实现注册接口。GA-T 1400中的步骤如下:这里的话,我们实现的简单点, 我们不进去鉴权,也就是设备或平台找我们注册的话,我们直接返回成功,不进行验证。如果需要鉴权的话可看我的另外一篇文档。

qq_37716298的博客 1043

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 77

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

AI和大模型—从克里金算法说开去

克里金算法源于矿业勘探,通过空间自相关性实现稀疏数据下的最优预测,核心优势在于不确定性量化。在AI大模型中,其等价于高斯过程,广泛应用于超参数优化、小样本建模与推理调度。尽管面临计算复杂度高、核函数选择难等问题,通过稀疏化、分治法与低秩近似可有效优化。该方法在降低训练成本、提升泛化能力及减少幻觉方面表现突出,尤其适用于高维、高成本的智能系统优化,具有重要借鉴价值。

fpcc的专栏 602

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 176

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

算法札记:几何分布在算法题UVA1262的运用

集卡问题求解核心:将集齐n种优惠券的过程分为n个阶段,每个阶段期望购买次数为 $ \frac{n}{k} $(k为剩余种类数),总期望为 $ n \cdot H_n $(调和数)。通过自洽方程推导单阶段期望,无需几何分布或无穷级数,逻辑清晰且适用于大一水平。例如,n=5时期望约11.42,非5。题目要求以带分数形式输出精确结果,算法上需累加分数并化简。

Keven_11的博客 307

不同的二叉搜索树

互不相同的二叉搜索树的种数,以 j (1<=j<=i)为头节点,左子树是 j-1 个数,右子树就是 i - (j - 1) -1 = i - j个数。所以dp[3] = dp[0] * dp[2] + dp[1] * dp[1] + dp[2] * dp[0]头1 = 左子树0节点 * 右子树2节点,二叉搜索树就是排序树,左子树<根节点<右子树,左右子树也满足左子树<根节点<右子树。头2 = 左子树1节点 * 右子树1节点。所以dp[i] += dp[j-1] * dp[i-j]个节点组成且节点值从。

qq_44721738的博客 150

SSL证书选RSA还是ECDSA:公钥算法、CA签名与兼容性怎么核对

申请SSL证书时,RSA和ECDSA该怎么选?先分清站点公钥算法、CA签名算法和TLS实际兼容性,再用隔离OpenSSL实验读取两类材料,核对申请、续期和部署交接,避免只看Signature Algorithm就选错。

谁呀!的博客 381

固件开发岗算法

背景:嵌入式固件岗,偏爱手写库函数、位运算、数组基础算法。

2502_90352018的博客 109

从曲线到储层:Techlog/KAPPA 全流程算法、UltraLAB 选型与本地 AI 部署实战

以高频 CPU 保证交互,以充足内存承载多井与多任务,以 NVMe 打通项目和知识库 I/O,再按本地模型、上下文与并发配置 GPU。对 UltraLAB 用户而言,更合理的采购方式是带着真实项目做选型:一组典型井、一套完整解释模板、一个目标大模型、一次多人并发测试。用实测结果确定配置,才能把预算转化为解释效率,而不是闲置算力。软件模块、操作系统与许可条件以厂商当前正式说明为准;硬件建议需结合项目实测。AI 输出只能作为辅助证据,不能替代岩石物理与油藏工程专业审核。

wdf8088的博客 161

【Deep-OC-SORT 01】多轨迹算法Deep-OC-SORT源码分析

本工程基于Deep-OC-SORT核心模块,重构并适配了EmbeddingComputer(外观特征提取)、CMCComputer(相机运动补偿)与OCSort(主跟踪器)三类。前者实现整框/网格模式的特征提取与L2归一化;后者通过稀疏光流或SIFT匹配估计仿射变换,补偿相机运动;主跟踪器融合IoU、外观相似度与方向一致性,支持模块开关与自定义组件,实现高效多目标跟踪。

Jayson 博客 330

C++ 标准库算法全景指南

本文系统梳理C++标准库<algorithm>与<numeric>中100+算法,按功能分为非修改、修改、排序、二分查找、归并、堆、极值、字典序、排列及数值操作十大类,涵盖典型用法与时间复杂度。结合C++20范围(ranges)与投影特性,实现更简洁高效的代码。

sss123ddd的博客 232

高速公路无人机巡检系统:场景、算法与部署方案

高速公路巡检的工程矛盾,不在“能不能飞到”,而在“端侧算力、时延约束与精度要求三者之间如何分配”。路面病害要求毫米级识别,但高速动态成像与运动模糊压制了单帧精度;交通事件要求秒级推送,但隧道与峡谷的通信盲区切断了云端链路;桥梁梁底的无卫星信号环境,则把自主定位的难度推到了GNSS失效的边界。本文从“端—边—云”三级协同的工程逻辑出发,拆解路面病害、交通事件、桥梁结构三类场景下算法与部署的实际取舍,结合重庆绕城高速、广西六宾高速、南京6G低空巡检等公开数据,给出可复用的系统设计参考。

THJS优快云的博客 192

Consistent-Point半监督人群计数算法详解

本文首次指出并量化了点定位半监督人群计数中伪点的位置不一致与类别不一致问题(Mean-Teacher baseline 甚至不如只用标注数据),并给出两个极简正交模块——PA 用"被匹配的伪点与其邻近提议点定位相似"的洞察做空间平均,以 1/K 方差收缩稳住位置;IUC 用分类得分做实例级加权,压低决策边界附近模糊伪点的监督强度。两模块零推理开销、只引入一个超参 λ,在 5 数据集 × 3 标注比例的 15 个定位设置上全部 SOTA,并在 CPS 框架上验证泛化性,说明"伪标签一致性"是点定位半监督范式中

Keep_Trying_Go的博客 320

算法日常・每日刷题--<动态规划>41

给定两个字符串text1和text2,求其最长公共子序列长度。使用动态规划,定义dp[i][j]为text1前i个字符与text2前j个字符的最长公共子序列长度。若字符相等,则dp[i][j] = dp[i-1][j-1] + 1;否则取舍弃一方的最大值:dp[i][j] = max(dp[i-1][j], dp[i][j-1])。最终返回dp[m][n]。时间复杂度O(mn),空间复杂度O(mn)。

2503_92261635的博客 133
上一篇: 代码随想录算法训练营Day52|647.回文子串、516.最长回文子序列
下一篇: 代码随想录算法训练营Day55|42.接雨水、84.柱状图中最大的矩形
viaNoir
博客等级 码龄10年 535粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值