问题描述:
给你一个数组 target 和一个整数 n。每次迭代,需要从 list = { 1 , 2 , 3 …, n } 中依次读取一个数字。
请使用下述操作来构建目标数组 target :
“Push”:从 list 中读取一个新元素, 并将其推入数组中。
“Pop”:删除数组中的最后一个元素。
如果目标数组构建完成,就停止读取更多元素。
题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。
请返回构建目标数组所用的操作序列。如果存在多个可行方案,返回任一即可。
样例如下:
代码如下:
import java.util.LinkedList;
import java.util.List;
//给你一个数组 target 和一个整数 n。每次迭代,需要从 list = { 1 , 2 , 3 ..., n } 中依次读取一个数字。
//请使用下述操作来构建目标数组 target :
//"Push":从 list 中读取一个新元素, 并将其推入数组中。
//"Pop":删除数组中的最后一个元素。
//如果目标数组构建完成,就停止读取更多元素。
//题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。
//请返回构建目标数组所用的操作序列。如果存在多个可行方案,返回任一即可。
public class BuildArray {
public static List<String> buildArray(int[] target, int n) {
List<String> list = new LinkedList<>();
int index = 0; //指向target的指针
for (int i = 1; i <=n ; i++) {
if (i==target[index]){
list.add("Push");
index++;
if (index>=target.length) break;//若已经到达了target的最后一个元素,则直接退出
}else {
list.add("Push");
list.add("Pop");
}
}
return list;
}
public static void main(String[] args) {
List<String> list = buildArray(new int[]{1,3},3);
System.out.println(list.toString());
List<String> list1 = buildArray(new int[]{1,2,3},3);
System.out.println(list1.toString());
}
}
结果如下: