Day11 栈和队列

news/2024/5/17 8:28:45/文章来源:https://blog.csdn.net/weixin_44918193/article/details/127157077

150. 逆波兰表达式求值

在这里插入图片描述

解法一:将计算部分抽象成一个函数,使代码更加简洁,避免了很多冗余操作。对比下面解法二(我自己写的),此解法(参考别人的)的代码更加精简。核心思想都是利用栈解决问题,遇到字符数字,则入栈,遇到运算符则将栈顶两元素退出来进行运算。那么如何判断是否是字符数字呢?这里用到了int()函数和try-except语句。如果是字符数字,用int()可以将其转换为数字,如果是运算符,使用int()则会报错,从而进入excep语句中。另外值得注意的是python的 b / a 会向下取整, 比如 -1 / 132 = -1。 题目要求是取整数部分,那么负数的时候,实际应该是向上取整, 解决方法: int(b / float(a))。python3 b / a 会转为小数计算,所以直接 int(b / a), 不能 b // a。

class Solution(object):def evalRPN(self, tokens):""":type tokens: List[str]:rtype: int"""def calculate(num1, num2, op):if op == '+':return num1 + num2elif op == '-':return num2 - num1elif op == '*':return num1 * num2else:return int(num2 / float(num1))stack = []for token in tokens:try:stack.append(int(token))except:num1 = stack.pop()num2 = stack.pop()stack.append(calculate(num1, num2, token))return stack[0]

解法二:直接去判断i是何种运算符,反正就四种,其余情况都是数字呗。

class Solution(object):def evalRPN(self, tokens):""":type tokens: List[str]:rtype: int"""stack = []ans = 0for i in tokens:if i == '+':ans = int(stack[-2]) + int(stack[-1])stack.pop()stack.pop()stack.append(ans)elif i == '-':ans = int(stack[-2]) - int(stack[-1])stack.pop()stack.pop()stack.append(ans)elif i == '*':ans = int(stack[-2]) * int(stack[-1])stack.pop()stack.pop()stack.append(ans)elif i == '/':ans = int(stack[-2]) / float(stack[-1])stack.pop()stack.pop()stack.append(ans)else:stack.append(i)return int(stack[0])

347. 前 K 个高频元素

在这里插入图片描述

解法一:用字典做哈希表,统计各个元素出现的频率,并根据出现的频率由高到低将字典排序。接着创建一个数组,将排好序的元素添加进数组,然后利用切片取出前k个元素。

如何让字典按值排序呢?这里回顾sorted函数的用法。(参考)

  1. sorted高阶函数语法格式: sorted(可迭代对象,key=函数名,reverse=False/True)
 作用:从可迭代对象中,依次取出一个元素,该元素再按照key规定的排列依据排序。可迭代对象:即可依次取值的对象,例如:集合,序列(列表,字符串,元组),字典等。key : 是列表排列的依据,一般可以自定义一个函数返回排序的依据,再把函数名绑定给key。reverse : 译为反转,reverse默认等于False,从小到大排序。等于True时,从大到小排序。
  1. 匿名函数lambda的格式: 函数名 = lambda [形参1,形参2,…] : ,返回操作语句块产生的结果并绑定给函数名。
例如: key=lambda x : x[1]       x:相当于字典集合中的一个元组, 例:dict_items([(3, 1), (1, 3), (2, 2)])中的(3, 1), (1, 3), (2, 2)x[1]: 返回x中的第二个元素,即键值对元组中的值。dict_items([(3, 1), (1, 3), (2, 2)])中的1或2或3

注意:

(1) sorted函数中的可迭代对象不要用字典dic,那样只能迭代出的字典dic的键。要用dic.items()才可迭代出字典的键值对。

例:不能用 dic_order=sorted(dic,key=lambda x:x[1],reverse=False)要用 dic_order=sorted(dic.items(),key=lambda x:x[1],reverse=False)

(2) sorted函数排好序后,要绑定一个对象(赋值),例:dic_order=sorted(dic.items(),key=lambda x:x[1],reverse=False).

 因为字典是无序类型,用sorted函数排好序后不绑定dic_order,字典会自动打乱顺序。
dic={3:1,1:3,2:2}    # 首先建一个字典dic#dic.items()返回的是: dict_items([(3, 1), (1, 3), (2, 2)])dic_order=sorted(dic.items(),key=lambda x:x[1],reverse=True)  # 按字典集合中,每一个元组的第二个元素排列。x相当于字典集合中遍历出来的一个元组。print(dic_order)     # 得到:  [(1, 3), (2, 2), (3, 1)]
class Solution(object):def topKFrequent(self, nums, k):""":type nums: List[int]:type k: int:rtype: List[int]"""record = {}for i in nums:if record.get(i):record[i] += 1else:record[i] = 1record1 = sorted(record.items(), key=lambda x: x[1], reverse=True)print(record1)ans = []for item in record1:ans.append(item[0])return ans[:k]

解法二:堆队列算法-heapq模块以及其定义的函数。代码随想录中卡哥的讲解。

heappush接受元组类型的参数,默认按照元组的第一个元素构成小根堆。参考:heapq模块学习

class Solution(object):def topKFrequent(self, nums, k):""":type nums: List[int]:type k: int:rtype: List[int]"""import heapq# 统计每个元素出现的频率mapping = {}for i in nums:mapping[i] = mapping.get(i, 0) + 1# 定义一个小根堆对频率进行排序priority_que = []for key, freq in mapping.items():heapq.heappush(priority_que, (freq, key))if len(priority_que) > k: # 如果堆的大小大于k 则弹出 保证堆的大小为kheapq.heappop(priority_que)# 找出前k个高频元素 因为小根堆弹出最小的 所以倒序输出到数组res = [0] * kfor i in range(k-1, -1, -1):res[i] = heapq.heappop(priority_que)[1]return res

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_395714.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux学习 -- Shell面试题练习

1、使用Linux命令查询file1中空行所在的行号 awk /^$/ {print NR} file1 // 使用正则表达式^$ 来表示空行 2、使用Linux命令计算文件a.txt的第二列的和并输出 张三 40 李四 50 王五20 cat a.txt | awk -F " " {sum$2} END {print sum} 3、Shell脚本中如何检查一个文…

欧拉函数的power

在算数基本定理中有 $ N = p_{1}^{a1} p_{2}^{a2} p_{3}^{a3} ..... p_{k}^{ak} $ wuw在y总的课中是用了容斥原理进行推导得到了 $ \phi(x) = N * (1 - \frac{1}{p1}) * (1 - \frac{1}{p2}) * .... * ( 1 - \frac{1}{pk}) $ 所以就可以得到依靠该公式得出的欧拉公式的算法 #in…

基本语法

输入输出输入: 输出:字符串: System.out.println("hello world!"); 字符串+数值 System.out.println("a =" + 8);import java.util.Scanner; //Scanner 是一个简单的文本扫描器public class MyInput {public static void main(String[] Args) {Scanne…

cat笔记

0.学习目标 能够知道什么是CAT能够搭建CAT服务端环境能够进行CAT客户端的集成能够使用CAT监控界面进行服务监控能够完成CAT和常用框架集成了解CAT告警配置了解CAT客户端和服务端原理 1.CAT入门 在这一部分我们主要介绍以下3部分内容: 什么是调用链监控 什么是CA…

【虚幻引擎UE】UE5 阴影异常与优化解决方案合集

一、消除阴影锯齿 异常效果: 模型锯齿状阴影。 解决方案: ① 确定打开虚拟阴影贴图。 虚拟阴影贴图(VSM)是一种全新的阴影贴图方法,可以提供稳定的高分辨率阴影。通过与虚幻引擎5的Nanite虚拟几何体、Lumen全局光照和…

Seata安装

文章目录一、下载二、MySQL配置三、Nacos配置四、启动参考一、下载 从Seata下载地址下载 https://github.com/seata/seata/releases 这里下载的是seata-server-1.5.2.tar.gz 解压: tar -xvf seata-server-1.5.2.tar.gz修改配置:conf/application.ym…

Python实战——全球疫情数据采集, 并做可视化

前言 大家早好、午好、晚好吖~ 知识点: 爬虫基本流程 requests 发送请求 re 正则表达式 json 结构化数据解析 开发环境: python 3.8: 解释器 pycharm: 代码编辑器 requests 发送请求 pyecharts 绘制图表 pandas 读取数据 基本原理: 模拟成 浏览器/客户端 向 服务器…

React-Hooks源码深度解读

useState 解析 useState 使用 通常我们这样来使用 useState 方法 function App() {const [num, setNum] useState(0);const add () > {setNum(num 1);};return (<div><p>数字: {num}</p><button onClick{add}> 1 </button></div>…

I2C 时序、速率计算及intel I2C驱动

目录 速率 信号 时序定义 START ACK NACK STOP 时序实战 速率计算 数据解读 异常时序 上拉电阻 I2C的设备驱动 速率 主要支持的速率如下&#xff1a; 100Kbps 400Kbps 1Mbps 3.4Mbps 信号 SDA 数据 SCL 时钟 时序定义 START SCL为高电平时&#xff0c;SD…

【FineReport企业日常问题 1.0】帆软决策服务端管理员密码忘记怎么办?

文章目录企业问题描述分析问题加密方式分类原理问题解决企业问题描述 有的时候我们在进行帆软部署的时候&#xff0c;设置管理密码的不小心忘记(当然这个是属于小概率事件) 其实是有相应的办法解决的~ 分析问题 首先&#xff0c;我们来了解一下帆软的加密算法 加密方式分类…

Angr学习 00_angr_find

Angr学习 00_angr_find1. github下载angr项目2. angr安装3. IDA静态分析4. angr使用说明5. exp6.运行结果1. github下载angr项目 点击前往github 2. angr安装 网上的教程都是要安装什么虚拟环境我也安装了但是可能因为我是初学者不知道这个虚拟环境有什么用我直接在shell中用…

grpc介绍(二)——认证方式

前言 HTTP是明文传输的&#xff0c;即客户端与服务端之间通信的信息是可见的&#xff0c;这就存在被窃听、冒充或篡改的风险。HTTPS在HTTP和TCP之间加入了TLS协议&#xff0c;如图所示&#xff1a; TLS协议主要解决了以下三个网络安全问题&#xff1a; 信息加密&#xff1a; …

cannot import name ‘TimedJSONWebSignatureSerializer‘ from ‘itsdangerous‘

该库在2.0.0版本之后就将TimedJSONWebSignatureSerializer类弃用了,引导用户使用直接支持JWS/JWT的库,如authlib。 解决方案:要么使用2.0.0版本之前的itsdangerous库,继续使用该类,要么换用authlib库来生成token。

LeetCode刷题复盘笔记—1373. 二叉搜索子树的最大键值和

今日主要总结一下&#xff0c;1373. 二叉搜索子树的最大键值和 题目&#xff1a;1373. 二叉搜索子树的最大键值和 Leetcode题目地址 题目描述&#xff1a; 给你一棵以 root 为根的 二叉树 &#xff0c;请你返回 任意 二叉搜索子树的最大键值和。 二叉搜索树的定义如下&…

【GNN从入门到精通】第二章 Graph Embedding

文章目录一、Graph Embedding的作用二、DeepWalk三、LINE四、SDNE五、Node2vec六、Struc2vec七、总结八、代码一、Graph Embedding的作用 优点&#xff1a; 保留了节点在图上的信息简化了节点的特征长度 二、DeepWalk 参数说明&#xff1a; window size&#xff1a;给定一个…

蜂窝移动通信系统

什么是蜂窝移动通信系统 5G的“G”是Generation的首部字母&#xff0c;5G即“第五代”&#xff0c;全称是“第五代蜂窝移动通信系统”。 在移动通信技术发展的早期阶段&#xff0c;采用大区制的通信方式。是指一个基站的覆盖范围很大&#xff0c;能够达到几十甚至上百公里范围。…

WEB安全之javascript基础(一):js的引入方法注释变量数据类型

WEB安全之javascript基础&#xff08;一&#xff09;&#xff1a;js的引入方法注释变量数据类型概述1、嵌入方法内嵌式外链式行内式2、语句3、注释4、变量5、JavaScript 保留关键字6、JavaScript 作用域Javascrpt 局部变量JavaScript 全局变量7、数据类型判断类型概述 JavaScri…

【基于熵权-模糊综合评价法】《基于熵权-模糊综合评价法的施工项目风险评价研究》论文笔记(内附MATLAB代码)

原文链接&#xff1a;基于熵权-模糊综合评价法的施工项目风险评价研究 - 中国知网 (cnki.net) 【基于熵权-模糊综合评价法】《基于熵权-模糊综合评价法的施工项目风险评价研究》论文笔记&#xff08;内附MATLAB代码&#xff09; 文章目录 1.施工项目风险评价指标体系 2.构建…

BOOK DAO - 《元宇宙创意图谱》 提案发布

01 背景在元宇宙概念与行业应用落地爆发式发展的时代&#xff0c;元宇宙概念阐述与行业报告分析等专业文章产出呈纷乱混杂之势&#xff0c;水平可信度不一。集理论、项目解读、实践教程与科普综合为一体的读物尤为稀少&#xff0c;甚至可以说是出版行业的空白。大众接触元宇宙的…

sealos4.1部署Kubernetes集群

sealos4.1部署Kubernetes集群 环境 免密登录 对于没有给 机器登录密码&#xff08;比如 root 密码&#xff09; 的环境来说&#xff0c;可以登录节点后配置 ssh key &#xff0c;用于在执行 sealos 指令的节点 免密登录 安装节点&#xff08;包括 master 和 其他节点&#xf…