代码随想录算法训练营29期Day61|LeetCode 739,496

文档讲解:每日温度 下一个更大元素I

739.每日温度

题目链接 :https://leetcode.cn/problems/daily-temperatures/description/

思路:

维护一个单调递减的栈就行了。

一次读取一个数组中的元素,将其与栈顶元素比较,如果比栈顶元素大,证明找到了栈顶元素右侧第一个比它大的,记录并弹出栈顶即可。

重复上述比较直至该元素小于栈顶元素或者栈空。

加入这个元素即可。

重复上述操作可解决问题。

核心代码:

cpp 复制代码
class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        stack<int> st;
        int n=temperatures.size();
        vector<int> ans(n,0);
        for(int i=0;i<n;i++){
            while(!st.empty()&&temperatures[st.top()]<temperatures[i]){
                ans[st.top()]=i-st.top();
                st.pop();
            }
            st.push(i);
        }
        return ans;
    }
};

496.下一个更大元素I

题目链接: https://leetcode.cn/problems/next-greater-element-i/description/

思路:

这题有O()的做法,就是枚举nums1中的数字,去nums2中遍历找到其位置,然后再向后找第一个比它大的值即可。

这种方法很简单,也能过这道题数据范围,但不在此赘述。

下面阐述一种O(n)的做法:

对nums2使用单调栈,维护一个单调递减的序列(详情见上一道题目),由此可得到nums2中每个值右侧的第一个比它大的值,记为map。

然后遍历nums1,根据map确定nums1中的值的下一个更大元素,获得答案数组输出即可。

核心代码:

cpp 复制代码
class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        map<int,int> mp;
        stack<int> st;
        int n=nums2.size();
        vector<int> ans(nums1.size(),-1);
        for(int i=0;i<n;i++){
            while(!st.empty()&&nums2[st.top()]<nums2[i]){
                mp[nums2[st.top()]]=nums2[i];
                st.pop();
            }
            st.push(i);
        }
        while(!st.empty()){
            mp[nums2[st.top()]]=-1;
            st.pop();
        }
        n=nums1.size();
        for(int i=0;i<n;i++) ans[i]=mp[nums1[i]];
        return ans;
    }
};

今日总结

这次的题学习时长1h,挺简单的。

接着论文idea,头大。

相关推荐
Zootopia6268 小时前
多架 eVTOL集群排班调度方案思考
人工智能·算法·数学建模·matlab·动态规划·无人机·evtol
可乐ea8 小时前
GitHub Security Lab 开源 Fuzzing Taskflow:让 LLM 智能体自己跑完 C/C++ 模糊测试
jvm·c++·github·模糊测试·mcp·代码agent·智能体自动化
和裕9 小时前
年度框架直供 vs 零散按需采购:定制纸箱采购成本、交付与服务核心区别全对比
大数据·运维·网络·人工智能·算法
朝朝辞暮i9 小时前
C++ 第 13 课:值传递 —— 为什么函数里改了,外面却没变?
java·c++·算法
淡海水9 小时前
02-02-原理篇-分代GC
算法·unity·c#·游戏引擎·.net·gc
平行侠9 小时前
065 B树(B-Tree)
数据结构·b树·树查找
无忧.芙桃10 小时前
C++语言原理与实践(十):vector类的底层实现
开发语言·c++·算法
无名猿10 小时前
std::variant 完全指南:类型安全的 union 与 std::visit 用法
c++·stl·标准库·现代c++
乐迪信息10 小时前
AI防爆摄像机,监测港口船舶航行偏航隐患
大数据·人工智能·深度学习·算法·计算机视觉
无名猿11 小时前
C++ 迭代器五分类与失效场景汇总:一张表避开所有 UB
c++·stl·标准库·踩坑记录