1441. 用栈操作构建数组『简单』

题目来源于力扣(LeetCode

一、题目

1441. 用栈操作构建数组

说明:

  • 1 <= target.length <= 100
  • 1 <= target[i] <= 100
  • 1 <= n <= 100
  • target 是严格递增的

二、解题思路

  1. 关键点:定义一个从 1 开始记数的变量

  2. 遍历 target 数组,每次遍历都先 Push 一次

  3. 判断元素是否需要 Pop

    当前遍历的元素与记数的变量 j 不相等时,Pop 一次,且遍历的索引需要减 1,表示重复遍历该元素,判断是否还需要再 Pop

  4. 每次遍历,变量 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));
}
posted @ 2020-05-17 20:52  知音12138  阅读(193)  评论(0编辑  收藏  举报