入门力扣自学笔记179 C++ (题目编号:1441)

1441. 用栈操作构建数组

题目:

给你一个数组 target 和一个整数 n。每次迭代,需要从  list = { 1 , 2 , 3 ..., n } 中依次读取一个数字。

请使用下述操作来构建目标数组 target :

"Push":从 list 中读取一个新元素, 并将其推入数组中。
"Pop":删除数组中的最后一个元素。
如果目标数组构建完成,就停止读取更多元素。
题目数据保证目标数组严格递增,并且只包含 1 到 n 之间的数字。

请返回构建目标数组所用的操作序列。如果存在多个可行方案,返回任一即可。


示例 1:

输入:target = [1,3], n = 3
输出:["Push","Push","Pop","Push"]
解释: 
读取 1 并自动推入数组 -> [1]
读取 2 并自动推入数组,然后删除它 -> [1]
读取 3 并自动推入数组 -> [1,3]


示例 2:

输入:target = [1,2,3], n = 3
输出:["Push","Push","Push"]


示例 3:

输入:target = [1,2], n = 4
输出:["Push","Push"]
解释:只需要读取前 2 个数字就可以停止。


提示:

1 <= target.length <= 100
1 <= n <= 100
1 <= target[i] <= n
target 严格递增


来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/build-an-array-with-stack-operations
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


思路:

建立一个vector容器来存储操作,每一个循环都要先将这个放入容器中,如果这个元素和目标元素一样,那么就对目标容易向后移动一位,如果不一样,在目标容器中加入pop操作。

最后返回容器即可。


代码:

class Solution {
public:
    vector buildArray(vector& target, int n) {
        vector p;//创建string容器对象
        for(int i=1,j=0;i<=n&&i<=target.back();i++)//i是迭代的数,j是遍历容器的下标,判断范围:[1,n]和[1,容器最后一个元素]
        {
            p.push_back("Push");//推入记录
            if(target[j]==i)//容器中存在元素
            {
                j++;//下标往后移一位
            }
            else//容器中不存在元素
            {
                p.push_back("Pop");//移除记录
            }
        }
        return p;//返回容器对象
    }
};

你可能感兴趣的:(力扣算法学习,leetcode,算法,c++)