用栈操作构建数组
给你一个数组 target 和一个整数 n。每次迭代,需要从 list = { 1 , 2 , 3 ..., n } 中依次读取一个数字。
请使用下述操作来构建目标数组 target :
"Push":从 list 中读取一个新元素, 并将其推入数组中。"Pop":删除数组中的最后一个元素。如果目标数组构建完成,就停止读取更多元素。题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。
请返回构建目标数组所用的操作序列。如果存在多个可行方案,返回任一即可。
复制代码
题解
思路变量 i 从 1 -> n,变量 j 从 0 -> target.length - 1.
如果当前 i === target[j],则进行 Push 操作。
如果当前 i !== target[j],则先进行 Push 操作,然后再进行 Pop 操作。
复制代码
解法二:
时间复杂度:O(n)哈希表两行版本
复制代码
小结
"如果目标数组构建完成,就停止读取更多元素。"
无需 break,只需遍历所需的最大值就行。其实就是 target 最后一项的值与 n 的大小比较,哪个小就是所需的最大值。
版权声明: 本文为 InfoQ 作者【掘金安东尼】的原创文章。
原文链接:【http://xie.infoq.cn/article/1186c411e6a45587f1835db5f】。文章转载请联系作者。
评论