《算法集训传送门》
?引言
铭记于心 | ||
---|---|---|
?✨?我唯一知道的,便是我一无所知?✨? |
? ❄️我们的算法之路❄️?
众所周知,作为一名合格的程序员,算法 能力 是不可获缺的,并且在算法学习的过程中我们总是能感受到算法的✨魅力✨。
☀️?短短几行代码,凝聚无数前人智慧;一个普通循环,即是解题之眼?☀️
?二分,?贪心,?并查集,?二叉树,?图论,?深度优先搜索(dfs),?宽度优先搜索(bfs),?数论,?动态规划等等, 路漫漫其修远兮,吾将上下而求索! 希望在此集训中与大家共同进步,有所收获!!!???
今日主题:单调栈
?⭐️第一题?
✨题目
✨代码:
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
?⭐️第二题?
✨题目
✨代码:
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;
}
};
?⭐️第三题?
✨题目
✨代码:
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;
}
};
?⭐️第四题?
✨题目
在每天散步时,阿丽娜注意到地上写着一长串数字。现在,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 后查看