题目来源于知识星球—英雄算法联盟,七月算法集训专题
目录
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、1614.括号的最大嵌套深度(简单)
1.题目描述
2.解题思路
遇到左括号就入栈,遇到右括号就出栈。随时记录栈的最大深度并更新。
如果空栈时,遇到右括号直接返回0.
3.代码演示(C++)
class Solution
{
public:
int maxDepth(string s)
{
int ret = 0, top = 0;
for(int i = 0; s[i]; ++i)
{
if(s[i] == '(')
{
++top;
}
else if(s[i] == ')')
{
--top;
}
ret = max(ret, top);
if(top < 0)
{
return 0;
}
}
return ret;
}
};
4.题目链接
二、剑指 Offer 06.从尾到头打印链表(简单)
1.题目描述
2.解题思路
根据题意从尾到头输出,即栈的思想,将链表元素全部入栈,然后全部出栈即可。
3.代码演示(C++)
class Solution
{
public:
vector<int> reversePrint(ListNode* head)
{
int stk[10010], top = 0;
vector<int> ret;
ListNode *now = head;
while(now)
{
stk[top++] = now->val;
now = now->next;
}
now = head;
while(top--)
{
ret.push_back(stk[top]);
}
return ret;
}
};
4.题目链接
三、1381.设计一个支持增量操作的栈(中等)
1.题目描述
2.解题思路
根据题意一步步往下写即可。
3.代码演示(C++)
class CustomStack
{
int top;
int size;
int *stk;
public:
CustomStack(int maxSize)
{
stk=new int [maxSize+1];
size=maxSize;
top=0;
}
void push(int x)
{
if(top<size)
{
stk[top++]=x;
}
}
int pop()
{
if(top==0)
{
return -1;
}
return stk[--top];
}
void increment(int k, int val)
{
for(int i=0;i<k&&i<top;i++)
{
stk[i]+=val;
}
}
};
4.题目链接
四、1441.用栈操作构建数组(简单)
1.题目描述
2.解题思路
num从1开始和数组target中的数字进行比对,如果相同,就push,
不相同先push再pop
3.代码演示(C++)
class Solution
{
public:
vector<string> buildArray(vector<int>& target, int n)
{
int num=1;
int m=target.size();
vector<string>ans;
for(int i=0;i<m;i++,num++)
{
while(target[i]!=num)
{
ans.push_back("Push");
ans.push_back("Pop");
num++;
}
ans.push_back("Push");
}
return ans;
}
};
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!