前言
每日氵题(7月14日)
一、练习题目
题目一:LeetCode |1614. 括号的最大嵌套深度
题目二:LeetCode |1381. 设计一个支持增量操作的栈
二、思路和代码
1. 括号的最大嵌套深度
遍历字符串,如果遇到了一个左括号,那么就将其入栈;如果遇到了一个右括号,那么就弹出栈顶的左括号,与该右括号匹配。并且记录栈到最大值。
对于本题,代码实现的时候,我们只需要记录栈的大小。
class Solution {
public:
int maxDepth(string s) {
int size = 0, ans = 0;
for(int i = 0; i < s.length(); ++i){
if( s[i] == '('){
++size; //(1)
}
else if( s[i] == ')' ){
--size; //(2)
}
ans = max(ans, size); //(3)
}
return ans;
}
};
(1)遇到左括号,栈的大小 +1
(2)遇到右括号,栈的大小 -1
(3)记录栈的最大深度
复杂度分析
时间复杂度:O(n)。n 为字符串s的长度
空间复杂度:O(1)。
2. 设计一个支持增量操作的栈
- 用一个数组模拟栈的操作
class CustomStack {
int top, 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) {
int i;
for(i = 0; i < k && i < top; ++i){
stk[i] += val;
}
}
};
/**
* Your CustomStack object will be instantiated and called as such:
* CustomStack* obj = new CustomStack(maxSize);
* obj->push(x);
* int param_2 = obj->pop();
* obj->increment(k,val);
*/
复杂度分析
时间复杂度:increment操作,O(k)。其他均为O(1)。
空间复杂度:O(n)。n 为 maxSize,栈中的元素量.