【代码随想录】day58

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • [一、739. 每日温度](#一、739. 每日温度)
  • [二、496.下一个更大元素 I](#二、496.下一个更大元素 I)

一、739. 每日温度

暴力解超时了

cpp 复制代码
class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        int n = temperatures.size();
        vector<int> res(n, 0);
        for (int i = 0; i < n; i ++) {
            for (int j = i + 1; j < n; j ++) {
                if (temperatures[j] > temperatures[i]) {
                    res[i] = j - i;
                    break;
                }
            }
        }
        return res;      
    }
};

单调栈:适合求当前元素,左面或者右面第一个比当前元素大或者小的元素

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

二、496.下一个更大元素 I

暴力搜索:

cpp 复制代码
class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        vector<int> res(nums1.size(), -1);
        for (int i = 0; i < nums1.size(); i ++) {
            int tmp = -1;
            for (int j = nums2.size() - 1; j >= 0; j --) {
                if (nums2[j] > nums1[i]) {
                    res[i] = nums2[j];
                }
                if (nums2[j] == nums1[i]) {
                    break;
                }
            }
        }
        return res;
    }
};

单调栈:

cpp 复制代码
class Solution {
public:
    vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
        stack<int> st;
        vector<int> res(nums1.size(), -1);
        unordered_map<int, int> umap;
        for (int i = 0; i < nums1.size(); i ++) {
            umap[nums1[i]] = i;
        }
        st.push(0);
        for (int i = 1; i < nums2.size(); i ++) {
            while (!st.empty() && nums2[i] > nums2[st.top()]) {
                int num = nums2[st.top()];
                if (umap.count(num) > 0) {
                    res[umap[num]] = nums2[i];
                }
                st.pop();
            }
            st.push(i);
        }
        return res;
    }
};
相关推荐
chao18984415 分钟前
基于MATLAB的双摆系统阻抗控制实现
算法
龙腾AI白云1 小时前
大模型-AIGC技术在文本生成与音频生成领域的应用
算法
坚持编程的菜鸟5 小时前
LeetCode每日一题——困于环中的机器人
c语言·算法·leetcode·机器人
Aurorar0rua7 小时前
C Primer Plus Notes 09
java·c语言·算法
我不是QI10 小时前
DES 加密算法:核心组件、加解密流程与安全特性
经验分享·算法·安全·网络安全·密码学
前端小刘哥10 小时前
新版视频直播点播EasyDSS平台,让跨团队沟通高效又顺畅
算法
明月(Alioo)10 小时前
机器学习入门,无监督学习之K-Means聚类算法完全指南:面向Java开发者的Python实现详解
python·算法·机器学习
叶梅树10 小时前
从零构建A股量化交易工具:基于Qlib的全栈系统指南
前端·后端·算法
lingran__11 小时前
算法沉淀第三天(统计二进制中1的个数 两个整数二进制位不同个数)
c++·算法
MicroTech202511 小时前
微算法科技MLGO推出隐私感知联合DNN模型部署和分区优化技术,开启协作边缘推理新时代
科技·算法·dnn