一、题目描述
给你一个目标数组 t a r g e t target target和一个整数 n n n。每次迭代,需要从 l i s t = { 1 , 2 , 3 , . . . , n } list=\{1, 2, 3, ..., n\} list={1,2,3,...,n}中依序读取一个数字。
请使用下述操作来构建目标数组 t a r g e t target target:
- P u s h : Push: Push:从 l i s t list list中读取一个新元素,并将其推入数组中。
- P o p : Pop: Pop:删除数组中的最后一个元素。
- 如果目标数组构建完成,就停止读取更多元素。
题目数据保证目标数组严格递增,并且只包含1到 n n n之间的数字。
请返回构建目标数组所用的操作序列。
题目数据保证答案是唯一的。
二、示例
输入: t a r g e t = [ 1 , 3 ] , n = 3 target = [1, 3], n = 3 target=[1,3],n=3
输出: [ “ P u s h ” , “ P u s h ” , “ P o p ” , “ P u s h ” ] [“Push”, “Push”, “Pop”, “Push”] [“Push”,“Push”,“Pop”,“Push”]
解释:
读取1并自动推入数组 → [ 1 ] [1] [1]
读取2并自动推入数组,然后删除它 → [ 1 ] [1] [1]
读取3并自动推入数组 → [ 1 , 3 ] [1, 3] [1,3]
三、主体思路
我们先明确一下题意,题目要求我们将 l i s t = { 1 , 2 , 3 , . . . , n } list=\{1, 2, 3, ..., n\} list={1,2,3,...,n}当中的数字依次进行 P u s h Push Push和 P o p Pop Pop操作,使得最终得到的序列与 t a r g e t target target序列相同,此时将构建 t a r g e t target target数组所用的操作序列进行返回即可。
由于题目保证 t a r g e t target target数组是严格递增,并且只包含1到 n n n之间的数字,因此我们一定可以构建出 t a r g e t target target数组。
遍历 t a r g e t target target数组,依次构建当中的每一个数字:
- 依次将 l i s t list list当中的数字 d a t a data data进行 P u s h Push Push操作。
- 在每个 d a t a data data被 P u s h Push Push后,需要判断 d a t a data data的值与当前遍历到的 t a r g e t target target当中的数字是否匹配,如果匹配则说明该数字构建成功,如果不匹配则需要进行 P o p Pop Pop操作。
- 如果当前遍历到的 t a r g e t target target当中的数字构建成功,则可以继续遍历 t a r g e t target target当中的下一个数字进行构建,否则还需要继续构建该数字。
需要注意的是,我们不需要将 l i s t list list当中所有的数字都进行 P u s h Push Push操作,当 t a r g e t target target数组当中的数字全部构建完毕后,就可以将构建 t a r g e t target target数组所进行的操作序列进行返回。