持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
用栈操作构建数组
该题出自力扣的1441题 —— 用栈操作构建数组【中等题】
审题
给你一个数组 target 和一个整数 n。每次迭代,需要从 list = { 1 , 2 , 3 ..., n } 中依次读取一个数字。 请使用下述操作来构建目标数组 target : "Push":从 list 中读取一个新元素, 并将其推入数组中。 "Pop":删除数组中的最后一个元素。 如果目标数组构建完成,就停止读取更多元素。 题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。 请返回构建目标数组所用的操作序列。如果存在多个可行方案,返回任一即可。
- 这道题,虽然是中等题,但是,题意很简单,不难理解的
- 就是给出一个整型数组,而且前提是该数组还是严格递增的,数组内包含1到n的数字,需要构建出这个数组所需要的操作,最后汇总成列表并返回即可。包含操作为,填充push,删除pop
- 其中判断,如果当前数字不存在数组内,那么就要类似栈一样,先入栈再出栈,同理在这边也就是 先push,再pop
- 解法:
- 先构建出返回的结果列表
- 循环遍历从1到n
- 先判断剪枝,如果已经到达数组的长度了,那么就证明后面的就不需要了,退出循环
- 无论是否需要弹栈都是要先进栈的
- 判断是否存在数组内,不存在则使用pop操作弹出
- 最后再数组下标加一
- 凡是不在数组里的数字先push再pop,在数组的只需要push
编码
class Solution {
public List<String> buildArray(int[] target, int n) {
List<String> list = new ArrayList<>();
int index = 0;
for (int i = 1; i <= n; i++) {
if (index == target.length)break;
list.add("Push");
if (target[index] != i){
list.add("Pop");
}else {
index++;
}
}
return list;
}
}