leetcode1441. 用栈操作构建数组
  TEZNKK3IfmPf 28天前 15 0

一、题目描述

给你一个目标数组 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数组,依次构建当中的每一个数字:

  1. 依次将 l i s t list list当中的数字 d a t a data data进行 P u s h Push Push操作。
  2. 在每个 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操作。
  3. 如果当前遍历到的 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数组所进行的操作序列进行返回。

四、代码实现

leetcode1441. 用栈操作构建数组

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 28天前 0

暂无评论

TEZNKK3IfmPf