【算法集训 | 暑期刷题营】7.9题---单调栈

发布于:2022-07-24 ⋅ 阅读:(315) ⋅ 点赞:(0)

算法集训传送门

  ?引言

在这里插入图片描述

铭记于心
?✨?我唯一知道的,便是我一无所知?✨?

? ❄️我们的算法之路❄️?

   众所周知,作为一名合格的程序员,算法 能力 是不可获缺的,并且在算法学习的过程中我们总是能感受到算法的✨魅力✨。
              ☀️?短短几行代码,凝聚无数前人智慧;一个普通循环,即是解题之眼?☀️
   ?二分,?贪心,?并查集,?二叉树,?图论,?深度优先搜索(dfs),?宽度优先搜索(bfs),?数论,?动态规划等等, 路漫漫其修远兮,吾将上下而求索! 希望在此集训中与大家共同进步,有所收获!!!???

在这里插入图片描述


今日主题:单调栈


 ?⭐️第一题?

   ✨题目

      1.下一个更大元素1
在这里插入图片描述

   ✨代码

class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        m, n = len(nums1), len(nums2)
        res = [0] * m
        for i in range(m):
            j = nums2.index(nums1[i])
            k = j + 1
            while k < n and nums2[k] < nums2[j]:
                k += 1
            res[i] = nums2[k] if k < n else -1
        return res

 ?⭐️第二题?

   ✨题目

       2.每日温度

在这里插入图片描述

   ✨代码

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        int n = temperatures.size();
        vector<int> ans(n), next(101, INT_MAX);
        for (int i = n - 1; i >= 0; --i) {
            int warmerIndex = INT_MAX;
            for (int t = temperatures[i] + 1; t <= 100; ++t) {
                warmerIndex = min(warmerIndex, next[t]);
            }
            if (warmerIndex != INT_MAX) {
                ans[i] = warmerIndex - i;
            }
            next[temperatures[i]] = i;
        }
        return ans;
    }
};

 ?⭐️第三题?

   ✨题目

      3.下一个更大元素2
在这里插入图片描述

   ✨代码

class Solution {
public:
    vector<int> nextGreaterElements(vector<int>& nums) {
        int n = nums.size();
        vector<int> ret(n, -1);
        stack<int> stk;
        for (int i = 0; i < n * 2 - 1; i++) {
            while (!stk.empty() && nums[stk.top()] < nums[i % n]) {
                ret[stk.top()] = nums[i % n];
                stk.pop();
            }
            stk.push(i % n);
        }
        return ret;
    }
};

 ?⭐️第四题?

   ✨题目

       4.回文数
在这里插入图片描述
在这里插入图片描述

在每天散步时,阿丽娜注意到地上写着一长串数字。现在,Alina 想要找到一些长度相同的正数,而不带前导零,使得这两个数字之和是回文。
回想一下,如果一个数字从右到左和从左到右读出相同的读数,则该数字称为回文。例如,数字 121,66,98989 是回文,103,239,1241 不是回文。
阿丽娜明白,一个有效的数字总是存在的。帮她找一个!

   ✨代码

d,f=input,int
for s in[0]*f(d()):
	n,x=f(d()),f(d());
	w=f('1'*n);
print(10**n-x+[1,w][w<x])

?写在最后?
相信大家对今天的集训内容的理解与以往已经有很大不同了吧,或许也感受到了算法的魅力,当然这是一定的,路漫漫其修远兮,吾将上下而求索!伙伴们,明天见!???在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到