输入:
初始化一个最大容量为 maxSize 的栈对象,依次执行如下三种操作:
-
push(x):若栈未满,则将x添加到栈顶; -
pop():弹出并返回栈顶元素,若栈为空则返回 -1; -
increment(k, val):栈底的前k个元素值都增加val。
要求:
实现一个自定义类 CustomStack,支持上述三种操作逻辑。
输出:
每个操作对应的执行结果数组。
思路:
这题本质是“用 vector 模拟栈 + 顺序加值”,不需要任何复杂结构。
逻辑分三步:
-
用
vector<int> Tstack存储栈内元素,记录最大容量finiteLen。 -
push()时检查是否超过容量上限。 -
pop()时若为空返回 -1,否则弹出尾部元素。 -
increment()时只对前min(k, size)个元素加上 val。
复杂度:
-
时间复杂度:
-
push / pop:O(1) -
increment:O(k)
-
-
空间复杂度:O(n)
class CustomStack {
private:
vector<int> Tstack;
int finiteLen;
public:
CustomStack(int maxSize) {
vector<int> Tstack;
finiteLen = maxSize;
}
void push(int x) {
if (Tstack.size() >= (size_t)finiteLen) {
return;
}
Tstack.push_back(x);
}
int pop() {
if (Tstack.empty()) {
return -1;
}
int tmp = Tstack.back();
Tstack.pop_back();
return tmp;
}
void increment(int k, int val) {
int n = std::min<int>(k, (int)Tstack.size());
for (int i = 0; i < n; ++i) {
Tstack[i] += val;
}
}
};
3049

被折叠的 条评论
为什么被折叠?



