输入: 一个目标数组 target 和一个整数 n。
要求: 模拟从一个包含 [1, n] 中整数的流中顺序读取数字,并使用 "Push" 和 "Pop" 两种操作来构建 target 数组。
- "Push":从流中读取一个数并将其加到栈顶。
- "Pop":从栈顶删除一个整数。
- 如果流中的数字与
target不匹配,则必须将其 Push 进栈后再 Pop 出去。 - 一旦栈中的元素等于
target,就停止操作。
输出: 返回一个 vector<string>,包含构建 target 所需的操作序列。
思路: 难点在于理解题目要求,正常遍历模拟即可。
复杂度:
时间复杂度:O(n)
空间复杂度:O(1)(不计算存储答案 ans 所需的空间)。
class Solution {
public:
vector<string> buildArray(vector<int>& target, int n) {
int len = target.size();
vector<string> ans;
int tmp = 1;
for (int i = 0; i < len; i++) {
while (tmp != target[i]) {
tmp++;
ans.push_back("Push");
ans.push_back("Pop");
}
tmp++;
ans.push_back("Push");
}
return ans;
}
};

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



