如果问题解决后帮助程序堆栈几乎完全删除,那么 space 复杂度是多少?
If a helper stack almost completely deletes after problem is solved, what is the space complexity?
我正在解决“有效括号”leetcode 问题 (#20) 并且我 运行 进入这个看起来非常有效的解决方案 - 它使用一个辅助堆栈,如果括号都有效。
我想知道 space 复杂度是否大约为 O(N) 或更小?我很困惑,主要是因为辅助堆栈通常在最后被删除,但我知道这不会是最坏的情况,所以我不太确定。
这是代码:
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for (char c : s.toCharArray()) {
if (c == '(')
stack.push(')');
else if (c == '{')
stack.push('}');
else if (c == '[')
stack.push(']');
else if (stack.isEmpty() || stack.pop() != c)
return false;
}
return stack.isEmpty();
}
}
谢谢!
I'm confused mostly because the helper stack is usually deleted at the end
这不是最终堆栈中的内容,而是堆栈中的内容在处理过程中。想象一个字符串 ((((((()))))))
(一个有效的括号序列)。即使堆栈最后是空的,它也会在解决方案的中途包含 N/2 个字符,即 O(N/2) 在渐近复杂度中是 O(N)。
另请记住,最好的情况通常不是很有用。我想最好的情况是 ()()()
,在任何时候你在堆栈中只有 1 个字符。但是因为我们很少关心最好的情况,所以我们想要最坏或预期的情况,即 O(N)。
所以答案就是 O(N)。
我正在解决“有效括号”leetcode 问题 (#20) 并且我 运行 进入这个看起来非常有效的解决方案 - 它使用一个辅助堆栈,如果括号都有效。
我想知道 space 复杂度是否大约为 O(N) 或更小?我很困惑,主要是因为辅助堆栈通常在最后被删除,但我知道这不会是最坏的情况,所以我不太确定。
这是代码:
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for (char c : s.toCharArray()) {
if (c == '(')
stack.push(')');
else if (c == '{')
stack.push('}');
else if (c == '[')
stack.push(']');
else if (stack.isEmpty() || stack.pop() != c)
return false;
}
return stack.isEmpty();
}
}
谢谢!
I'm confused mostly because the helper stack is usually deleted at the end
这不是最终堆栈中的内容,而是堆栈中的内容在处理过程中。想象一个字符串 ((((((()))))))
(一个有效的括号序列)。即使堆栈最后是空的,它也会在解决方案的中途包含 N/2 个字符,即 O(N/2) 在渐近复杂度中是 O(N)。
另请记住,最好的情况通常不是很有用。我想最好的情况是 ()()()
,在任何时候你在堆栈中只有 1 个字符。但是因为我们很少关心最好的情况,所以我们想要最坏或预期的情况,即 O(N)。
所以答案就是 O(N)。