1441. 用栈操作构建数组『简单』
题目来源于力扣(LeetCode)
一、题目
说明:
1 <= target.length <= 100
1 <= target[i] <= 100
1 <= n <= 100
target
是严格递增的
二、解题思路
-
关键点:定义一个从 1 开始记数的变量
-
遍历 target 数组,每次遍历都先 Push 一次
-
判断元素是否需要 Pop
当前遍历的元素与记数的变量 j 不相等时,Pop 一次,且遍历的索引需要减 1,表示重复遍历该元素,判断是否还需要再 Pop
-
每次遍历,变量 j 都加 1
本方式题解中未使用到参数 n
三、代码实现
public static List<String> buildArray(int[] target, int n) {
List<String> list = new ArrayList<>();
// 变量 j 记录从 1 开始的数字,每次加 1
int j = 1;
for (int i = 0; i < target.length; i++) {
// 每次遍历都需要一次 push
list.add("Push");
if (target[i] != j) {
// 当前遍历元素与 j 不相等时,需要 pop 一次,即弹出已经 Push 的元素
list.add("Pop");
// 本次遍历不计算,重新遍历当前元素
i --;
}
// j 每次加 1
j ++;
}
return list;
}
四、执行用时
五、部分测试用例
public static void main(String[] args) {
int[] target = {1, 3};
int n = 3; // output:{"Push", "Push", "Pop", "Push"}
// int[] target = {1, 2, 3};
// int n = 3; // output:{"Push", "Push", "Push"}
//
// int[] target = {1, 2};
// int n = 4; // output:{"Push", "Push"}
//
// int[] target = {2, 3, 4};
// int n = 4; // output:{"Push", "Pop", "Push", "Push", "Push"}
List<String> result = buildArray(target, n);
System.out.println(Arrays.toString(result));
}