数据结构与算法 Python 第 3 周
时间:2022-08-10
本文章向大家介绍数据结构与算法 Python 第 3 周,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Notes
栈的模板
class Stack(object):
def __init__(self):
self.items = []
def empty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def top(self):
return self.items[-1]
def size(self):
return len(self.items)
def clear(self):
self.items = []
1:有效的括号
class Stack(object):
def __init__(self):
self.items = []
def empty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def top(self):
return self.items[-1]
def size(self):
return len(self.items)
def clear(self):
self.items = []
s = Stack()
str = input()
for it in str:
if it == '{' or it == '[' or it == '(':
s.push(it)
else :
if s.empty() == True :
print("False")
exit(0)
if (it == '}' and s.top() == '{') or (it ==')' and s.top() =='(') or (it == ']' and s.top() == '[' ):
s.pop()
continue
print("False")
exit(0)
if( s.empty() ) :
print("True")
else:
print("False")
2:一维开心消消乐
class Stack(object):
def __init__(self):
self.items = []
def empty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def top(self):
return self.items[-1]
def size(self):
return len(self.items)
def clear(self):
self.items = []
s = Stack()
str = input()
for it in str:
if s.empty() == 1 :
s.push(it)
elif it == s.top() :
s.pop()
else:
s.push(it)
if s.empty() :
print("None")
exit(0)
for it in s.items:
print(it,end='')
3:强迫症老板和他的洗碗工
这里我用栈A来维护当前的元素,栈B来维护已经被取出的元素。
首先如果栈B是空的,那么就说明没有元素被取出,我可以先把[0,x]
放入 A 中,然后把元素x
取出再重新放入 B 中。
剩下的情况就是 B 不是空的,首先判断如果要取出的元素比最后一次取出的元素大,那么我们就把[B.top,x]
放入 A 中然后把x
取出放入B中。
如果x
比B.top
小,那么可以确定是,[0,B.top]
一定全部进入过A中,那么如果A.top
是x
的话x+1
一定已经从A中出来进入B中,否则就是不合法的情况
然后发现整个过程中是不需要维护A的
class Stack(object):
def __init__(self):
self.items = []
def empty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def top(self):
return self.items[-1]
def size(self):
return len(self.items)
def clear(self):
self.items = []
def count(self , val ):
for i in self.items :
if i == val :
return True
return False
def wash( ve ):
stk = Stack()
for it in ve:
if stk.empty():
stk.push(it)
elif it < stk.top() :
if stk.count(it+1) == False :
return "No"
else :
stk.push(it)
else:
stk.push(it)
return "Yes"
ve = []
for it in input():
ve.append( int(it) )
print(wash(ve))
Notes
栈的模板
class Stack(object):
def __init__(self):
self.items = []
def empty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def top(self):
return self.items[-1]
def size(self):
return len(self.items)
def clear(self):
self.items = []
1:有效的括号
class Stack(object):
def __init__(self):
self.items = []
def empty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def top(self):
return self.items[-1]
def size(self):
return len(self.items)
def clear(self):
self.items = []
s = Stack()
str = input()
for it in str:
if it == '{' or it == '[' or it == '(':
s.push(it)
else :
if s.empty() == True :
print("False")
exit(0)
if (it == '}' and s.top() == '{') or (it ==')' and s.top() =='(') or (it == ']' and s.top() == '[' ):
s.pop()
continue
print("False")
exit(0)
if( s.empty() ) :
print("True")
else:
print("False")
2:一维开心消消乐
class Stack(object):
def __init__(self):
self.items = []
def empty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def top(self):
return self.items[-1]
def size(self):
return len(self.items)
def clear(self):
self.items = []
s = Stack()
str = input()
for it in str:
if s.empty() == 1 :
s.push(it)
elif it == s.top() :
s.pop()
else:
s.push(it)
if s.empty() :
print("None")
exit(0)
for it in s.items:
print(it,end='')
3:强迫症老板和他的洗碗工
这里我用栈A来维护当前的元素,栈B来维护已经被取出的元素。
首先如果栈B是空的,那么就说明没有元素被取出,我可以先把[0,x]
放入 A 中,然后把元素x
取出再重新放入 B 中。
剩下的情况就是 B 不是空的,首先判断如果要取出的元素比最后一次取出的元素大,那么我们就把[B.top,x]
放入 A 中然后把x
取出放入B中。
如果x
比B.top
小,那么可以确定是,[0,B.top]
一定全部进入过A中,那么如果A.top
是x
的话x+1
一定已经从A中出来进入B中,否则就是不合法的情况
然后发现整个过程中是不需要维护A的
class Stack(object):
def __init__(self):
self.items = []
def empty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def top(self):
return self.items[-1]
def size(self):
return len(self.items)
def clear(self):
self.items = []
def count(self , val ):
for i in self.items :
if i == val :
return True
return False
def wash( ve ):
stk = Stack()
for it in ve:
if stk.empty():
stk.push(it)
elif it < stk.top() :
if stk.count(it+1) == False :
return "No"
else :
stk.push(it)
else:
stk.push(it)
return "Yes"
ve = []
for it in input():
ve.append( int(it) )
print(wash(ve))
原文地址:https://www.cnblogs.com/PHarr/p/16573687.html
- 使用MiniProfiler调试ASP.NET MVC网站性能
- 大金主撑腰 4声母Mynt.com竟36万元结拍
- ASP.NET MVC4 Web API 堆栈将添加指定消息处理功能
- 页面copyright部分始终居于页面底部
- Hammock for REST
- 网页超过一屏时自动浮动在网页最上方的图层特效
- 关于gcc、glibc和binutils模块之间的关系
- 贝叶斯过滤算法
- 強大的jQuery Chart组件-Highcharts
- vue2.0 配置 选项 属性 方法 事件 ——速查
- 亲密接触IIS 8和Web Deploy 3.0
- vue2.0 组件通信
- 在MongoDB中实现聚合函数
- 原生JS编写的照片墙效果实例演示特效
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOS6.5与CentOS7 ssh修改默认端口号的方法
- CentOS8 配置本地yum源的详细教程
- linux查找大文件指定内容的实现方法
- linux服务器上安装jdk的两种方法(yum+下载包)
- ubuntu中编写shell脚本开机自动启动(推荐)
- linux下使用 CentOS7安装jdk1.7
- 安装CentOS 6.x报错"Disk sda contains BIOS RAID metadata"解决方法
- 重启宝塔面板后提示-ModuleNotFoundError: No module named 'geventwebsocket'
- Linux动态启用/禁用超线程技术的方法详解
- 解决Ubuntu下使用linuxdeployqt打包Qt程序问题
- 使用python获取基金历史数据
- 如何在CentOS8上安装和配置Postfix邮件服务器的方法示例
- Linux下设置Vim编辑器里Tab的长度行号
- Centos定制rpm包、搭建yum仓库的教程
- linux手动、自动更改网卡MAC地址的方法