• 代码随想录训练营第五十八天|739. 每日温度、496.下一个更大元素 I


    739. 每日温度

    题目链接/文章讲解/代码讲解:代码随想录

    1.代码展示

    1. //739.每日温度
    2. vector<int> dailyTemperatures(vector<int>& temperatures) {
    3. stack<int> st;
    4. vector<int> vnResult(temperatures.size(), 0);
    5. st.push(0);
    6. for (int i = 1; i < temperatures.size(); i++) {
    7. if (temperatures[i] <= temperatures[st.top()]){
    8. st.push(i);
    9. }
    10. else {
    11. while (!st.empty() && temperatures[i] > temperatures[st.top()]) {
    12. vnResult[st.top()] = i - st.top();
    13. st.pop();
    14. }
    15. st.push(i);
    16. }
    17. }
    18. return vnResult;
    19. }

    2.本题小节

            思考:首先明确单调栈的使用场景,通常是用在寻找任意一个元素的左边或者右边的第一个比自己小或者大的元素,本题是找比当前元素大的右边的第一个元素,并计算下标距离。单调栈的本质是牺牲空间来换取时间,所以时间复杂度为O(n),只需要遍历一次即可,注意栈中储存的是下标,方便进行距离的统计。

            基本思路:首先创建容器和栈,分别用来储存结果和遍历过程中的元素,在遍历前先将下标0push到栈中,便于遍历中进行比较;对温度进行遍历,每次和栈顶的元素进行比较,小于等于时,说明当前元素不满足要求,将下标push到栈内;大于的话,则将栈顶对应下标位置与当前下标位置求差,计算的结果保存,这里主要要一直判断是否大于,因为当前元素不止比栈顶的大,计,注意把计算后的下标从栈内pop处,等到所有计算完毕后,将当前下标push到栈中。 

    496.下一个更大元素 I  

     题目链接/文章讲解/代码讲解:代码随想录

    1.代码展示

    1. //496.下一个更大元素Ⅰ
    2. vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {
    3. stack<int> st;
    4. vector<int> vnResult(nums1.size(), -1);
    5. if (nums1.size() == 0) return vnResult;
    6. unordered_map<int, int> nnMap;
    7. for (int i = 0; i < nums1.size(); i++) {
    8. nnMap.insert(make_pair(nums1[i], i));
    9. }
    10. st.push(0);
    11. for (int i = 1; i < nums2.size(); i++) {
    12. if (nums2[i] <= nums2[st.top()]) {
    13. st.push(i);
    14. }
    15. else {
    16. while (!st.empty() && nums2[i] > nums2[st.top()]) {
    17. if (nnMap.count(nums2[st.top()])) {
    18. int index = nnMap[nums2[st.top()]];
    19. vnResult[index] = nums2[i];
    20. }
    21. st.pop();
    22. }
    23. st.push(i);
    24. }
    25. }
    26. return vnResult;
    27. }

    2.本题小节

            思考:本题与上一题类似,与上一题不同的是,本题相当于求解的是在nums2出现的比nums1元素大的第一个右边的元素,因此在遍历nums2时出现了比栈顶大的元素时,判断栈顶的元素是否出现在nums1中,如果出现在,则填充当前下标对应的元素到栈顶元素对应下标的结果中。

            基本思路:首先要构建map,存入nums1下标对应的元素和下标,vector容器初始化时都为-1,剩余步骤和上一题相似。

     

  • 相关阅读:
    【Apifox Helper】自动生成接口文档,IDEA+Apifox懒人必备
    [Azure - VM] 虚拟机获取root权限及开启root账户的办法
    用移动硬盘当系统盘,即插即用
    143、锐捷交换机恢复出厂和各种基本配置
    MySQL:日期函数整理
    国外报告90%的AI类产品公司已经实现盈利,而国内大模型和AIGC的访谈说太卷了...
    长三角实现区块链电子医疗票据互联互通,蚂蚁链提供技术支持
    变分自编码器 (Variational Autoencoders, VAEs)
    Python突破浏览器TLS/JA3 指纹
    Linux CentOS8安装gitlab_ce步骤
  • 原文地址:https://blog.csdn.net/weixin_62453859/article/details/132766583