当前位置: 首页 > news >正文

Leetcode 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 列表长度和 n 比较,如果长度等于 n 或者当 target 最后一个元素小于 n 的时候, 返回 [“Push”] * target 的长度;
2.新搞个数组 returnlist 。当不满足 1 的条件下,for 循环1 - n 的数字,如果这个数字在 target 里,returnlist 里续上 “Push”, 否则续上 “Push”、“Pop”。

class Solution:
    def buildArray(self, target: List[int], n: int) -> List[str]:
        targetlen = len(target)
        if targetlen == n or target[-1] < n:
            return ["Push"] * targetlen
        else:
            returnlist = []
            for i in range(1,n+1):
                if i not in target:
                    returnlist.extend(["Push", "Pop"])
                else:
                    returnlist.append("Push")
            return returnlist

然后没过

36 / 49 个通过的测试用例
输入
target = [1,3,4,6,7,8] n = 9
输出
[“Push”,“Push”,“Push”,“Push”,“Push”,“Push”]
预期结果
[“Push”,“Push”,“Pop”,“Push”,“Push”,“Push”,“Pop”,“Push”,“Push”,“Push”]

然后觉着是不是 n 没用啊,迷惑人来着。for 循环1 - target[-1] 的数字,如果这个数字在 target 里,targetlist 里续上 “Push”, 否则续上 “Push”、“Pop”。试了一下,过了。

class Solution:
    def buildArray(self, target: List[int], n: int) -> List[str]:
        targetlist = list()
        for i in range(1, target[-1] + 1):
            if i in target:
                targetlist.append("Push")
            else:
                targetlist.extend(["Push", "Pop"])
        return targetlist

官方思路也差不多:
在这里插入图片描述
Python3:

class Solution:
    def buildArray(self, target: List[int], n: int) -> List[str]:
        res = []
        prev = 0
        for number in target:
            for _ in range(number - prev - 1):
                res.append('Push')
                res.append('Pop')
            res.append('Push')
            prev = number
        return res


C++:

class Solution {
public:
    vector<string> buildArray(vector<int>& target, int n) {
        vector<string> res;
        int prev = 0;
        for (int number : target) {
            for (int i = 0; i < number - prev - 1; i++) {
                res.emplace_back("Push");
                res.emplace_back("Pop");
            }
            res.emplace_back("Push");
            prev = number;
        }
        return res;
    }
};

C:

char ** buildArray(int* target, int targetSize, int n, int* returnSize) {
    char **res = (char **)malloc(sizeof(char *) * n * 2);
    int prev = 0, pos = 0;
    for (int j = 0; j < targetSize; j++) {
        for (int i = 0; i < target[j] - prev - 1; i++) {
            res[pos] = (char *)malloc(sizeof(char) * 8);
            strcpy(res[pos++], "Push");
            res[pos] = (char *)malloc(sizeof(char) * 8);
            strcpy(res[pos++], "Pop");
        }
        res[pos] = (char *)malloc(sizeof(char) * 8);
        strcpy(res[pos++], "Push");
        prev = target[j];
    }
    *returnSize = pos;
    return res;
}

作者:力扣官方题解
链接:https://leetcode.cn/problems/build-an-array-with-stack-operations/solutions/1890865/yong-zhan-cao-zuo-gou-jian-shu-zu-by-lee-omde/

相关文章:

  • 数据结构与算法分析之排序算法
  • 利用STM32CubeMX快速创建点灯带调试输出工程案例
  • new 和 delete 为什么要匹配使用
  • 00后表示真干不过,部门新来的00后测试员已把我卷崩溃,想离职了...
  • 3年测试在职,月薪还不足20K,惨遭裁员,用亲身经历给大家提个醒..
  • 【从小白到大白03】类和对象-下
  • [DAX] MAX函数 | MAXX函数
  • Pytorch实战 | 第4天:猴痘病识别
  • 【C ++基础】第五篇 类和对象 日期计算器
  • SpringBoot+Vue实现前后端分离大学信息及院校推荐网站
  • 编程初学者如何缓解迷茫和焦虑?墙裂推荐此文,助你赢在起跑线
  • [创业之路-42] 创业是只有一小部分人活下来的游戏,探究创业失败的20个主要原因与提高成功率
  • FPGA实现SPI协议
  • 2022年金砖国家职业技能大赛(决赛)网络空间安全赛项 | 浙江赛区选拔赛 任务书
  • 第8章 聚合函数
  • 《Java编程思想》读书笔记-对象导论
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • CSS 三角实现
  • Iterator 和 for...of 循环
  • mysql 数据库四种事务隔离级别
  • nginx 负载服务器优化
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • windows下如何用phpstorm同步测试服务器
  • 分布式任务队列Celery
  • 服务器从安装到部署全过程(二)
  • 机器学习学习笔记一
  • 前端面试之CSS3新特性
  • 区块链技术特点之去中心化特性
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • Android开发者必备:推荐一款助力开发的开源APP
  • linux 淘宝开源监控工具tsar
  • python最赚钱的4个方向,你最心动的是哪个?
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #传输# #传输数据判断#
  • (Note)C++中的继承方式
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (四)Controller接口控制器详解(三)
  • (转)nsfocus-绿盟科技笔试题目
  • (转)ObjectiveC 深浅拷贝学习
  • (转)Scala的“=”符号简介
  • ******之网络***——物理***
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET 中的轻量级线程安全
  • .Net程序帮助文档制作
  • .net反编译的九款神器
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .NET文档生成工具ADB使用图文教程
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [Apio2012]dispatching 左偏树
  • [C/C++]数据结构 深入挖掘环形链表问题
  • [CF226E]Noble Knight's Path
  • [I2C]I2C通信协议详解(一) --- 什么是I2C
  • [Java][Android][Process] ProcessBuilder与Runtime差别