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

【算法刷题篇】——算法入门 01 数据结构——栈(一)

在这里插入图片描述

🤵‍♂️ 个人主页: @北极的三哈 个人主页

👨‍💻 作者简介:CSDN内容合伙人,Python领域优质创作者。

📒 系列专栏:《牛客刷题-Python篇》《牛客刷题-SQL篇》《算法刷题篇》

🌐推荐:《牛客网》——找工作神器|笔试题库|面试经验|实习经验内推

👉 点击链接进行注册学习

在这里插入图片描述


算法入门 01 数据结构

在这里插入图片描述


AB1 【模板】栈

描述
请你实现一个栈。

操作
push x:将 加x x\ x 入栈,保证 x x\ xint 型整数。
pop:输出栈顶,并让栈顶出栈
top:输出栈顶,栈顶不出栈

输入描述:
第一行为一个正整数 n n\ n ,代表操作次数。(1≤n≤100000)(1 \leq n \leq 100000)(1≤n≤100000)接下来的 n n\ n ,每行为一个字符串,代表一个操作。

保证操作是题目描述中三种中的一种。

输出描述:
如果操作为push,则不输出任何东西。

如果为另外两种,若栈为空,则输出 "error"

否则按对应操作输出。

示例1
输入:6
   push 1
   pop
   top
   push 2
   push 3
   pop
输出:1
   error
   3

代码:

class Stack:
    def __init__(self):
        self.items = []

    def isEmpty(self):
        return self.items == []

    def push(self, item):
        self.items.append(item)

    def pop(self):
        return self.items.pop()

    def peek(self):
        return self.items[len(self.items) - 1]

    def size(self):
        return self.items[len(self.items)]


s = Stack()
num = int(input())
for i in range(num):
    a = input()
    if a[0:4] == "push":
        b = a.split(" ")
        s.push(int(b[1]))
    if a == "pop":
        if s.isEmpty() == True:
            print("error")
        else:
            print(s.peek())
            s.pop()
    if a == "top":
        if s.isEmpty() == True:
            print("error")
        else:
            print(s.peek())

自测运行:
在这里插入图片描述


AB2 栈的压入、弹出序列

描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。

例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,4,3,5,1,2就不可能是该压栈序列的弹出序列。

1.0<=pushV.length == popV.length <=1000
2 -1000<=pushV[i]<=1000
3.pushV 的所有数字均不相同

示例1
输入:[1,2,3,4,5],[4,5,3,2,1]

返回值:true

说明:
可以通过push(1)=>push(2)=>push(3)=>push(4)=>pop()=>push(5)=>pop()=>pop()=>pop()=>pop()这样的顺序得到[4,5,3,2,1]这个序列,返回true

示例2
输入:[1,2,3,4,5],[4,3,5,1,2]

返回值:false

说明:
由于是[1,2,3,4,5]的压入顺序,[4,3,5,1,2]的弹出顺序,要求4,3,5必须在1,2前压入,且1,2不能弹出,但是这样压入的顺序,1又不能在2之前弹出,所以无法形成的,返回false

代码:

# -*- coding:utf-8 -*-

# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可

# @param pushV int整型一维数组
# @param popV int整型一维数组
# @return bool布尔型


class Solution:
    def IsPopOrder(self, pushV, popV):
        # stack中存入pushV中取出的数据
        stack = []
        while popV:
            # 如果第一个元素相等,直接都弹出,根本不用压入stack
            if pushV and popV[0] == pushV[0]:
                popV.pop(0)
                pushV.pop(0)
            # 如果stack的最后一个元素与popV中第一个元素相等,将两个元素都弹出
            elif stack and stack[-1] == popV[0]:
                stack.pop()
                popV.pop(0)
            # 如果pushV中有数据,压入stack
            elif pushV:
                stack.append(pushV.pop(0))
            # 上面情况都不满足,直接返回false。
            else:
                return False
        return True

自测运行:
在这里插入图片描述

保存提交:
在这里插入图片描述

相似企业真题
在这里插入图片描述


推 荐:牛客题霸-经典高频面试题库

🌐 找工作神器-|笔试题库|面试经验|大厂面试题 👉 点击链接进行注册学习
在这里插入图片描述


相关文章:

  • 使用python进行数据分析(二)
  • C++实现二分法求零点(二分法求零点)
  • SECS/GEM半导体协议介绍
  • ARM接口实验-LED灯实验(A7核)
  • 经典卷积和深度卷积的神经网络
  • 【C语言】一篇文章彻底搞懂变量和常量
  • CSS基础12-canvas
  • javascript时钟的开发制作
  • 应用层协议 —— HTTP(二)
  • Qt之QCompleter的简单使用(自动补全、文本框提示、下拉框提示含源码+注释)
  • MyBatis-Plus(二)
  • Linux-常见命令(三)
  • 【国庆活动】Spring Boot 必知必会的核心理念(二)
  • c++:程序流程结构,顺序结构,选择结构if else,三目运算符
  • 使用 Amazon Rekognition API 进行文本检测和 OCR
  • [NodeJS] 关于Buffer
  • 2017年终总结、随想
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • go append函数以及写入
  • java概述
  • java取消线程实例
  • JS函数式编程 数组部分风格 ES6版
  • node 版本过低
  • 简单基于spring的redis配置(单机和集群模式)
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 深入浅出webpack学习(1)--核心概念
  • 自制字幕遮挡器
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • 我们雇佣了一只大猴子...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​插件化DPI在商用WIFI中的价值
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #DBA杂记1
  • #每日一题合集#牛客JZ23-JZ33
  • (+4)2.2UML建模图
  • (02)vite环境变量配置
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (转)EXC_BREAKPOINT僵尸错误
  • (轉貼) UML中文FAQ (OO) (UML)
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .Net - 类的介绍
  • .NET 使用配置文件
  • .NET 药厂业务系统 CPU爆高分析
  • .NET/C# 使窗口永不获得焦点
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .Net中ListT 泛型转成DataTable、DataSet
  • /etc/fstab和/etc/mtab的区别
  • :中兴通讯为何成功
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [20190113]四校联考
  • [20190401]关于semtimedop函数调用.txt