代码随想录算法训练营第12天|150. 逆波兰表达式求值、239. 滑动窗口最大值、347. 前 K 个高频元素

在补在补了

打卡Day12

  • 1.150. 逆波兰表达式求值
  • 2.239. 滑动窗口最大值
  • 3.347. 前 K 个高频元素
  • 总结

1.150. 逆波兰表达式求值

题目链接:逆波兰表达式求值
文档讲解: 代码随想录

class Solution(object):def evalRPN(self, tokens):""":type tokens: List[str]:rtype: int"""stack = []for i in tokens:if i not in {'+', '-', '*', '/'}:stack.append(i)else:num1 = int(stack.pop())num2 = int(stack.pop())if i == '+':stack.append(num1 + num2)elif i == '-':stack.append(num2 - num1)elif i == '*':stack.append(num2 * num1)else:stack.append(num2 // num1 if num1 * num2 > 0 else - (abs(num2) // abs(num1)))    return int(stack.pop())

两个注意点:
(1)弹出的元素要进行类型转换,因为存储的是字符,要转成整型
(2)进行整除操作的时候,要考虑到负数的情况;要用绝对值整除,再取负

可以调用内置函数

from operator import add, sub, muldef div(x, y):# 使用整数除法的向零取整方式return int(x / y) if x * y > 0 else -(abs(x) // abs(y))class Solution(object):op_map = {'+': add, '-': sub, '*': mul, '/': div}def evalRPN(self, tokens: List[str]) -> int:stack = []for token in tokens:if token not in {'+', '-', '*', '/'}:stack.append(int(token))else:op2 = stack.pop()op1 = stack.pop()stack.append(self.op_map[token](op1, op2))  # 第一个出来的在运算符后面return stack.pop()

2.239. 滑动窗口最大值

题目链接:滑动窗口最大值
文档讲解: 代码随想录

思路:暴力求解过程中,遍历一遍的复杂度为O(n × m)。大顶堆(优先级队列)会改变队列元素的顺序,会导致弹出元素的时候出现问题。使用的单调队列只维护有可能成为窗口最大值的元素,同时保持队列里的元素数值是由大到小的,与优先级队列最大的区别是不改变队列中元素的顺序。

class MyQueue:#单调队列def __init__(self):self.queue = deque() #直接使用list会超时#检查要弹出的元素是否为队列出口元素的数值def pop(self, value):if self.queue and value == self.queue[0]:self.queue.popleft()#如果push的数值大于入口元素,就将队列后端的数值弹出,直到push的数值小于入口元素值def push(self, value):while self.queue and value > self.queue[-1]:self.queue.pop()self.queue.append(value)#查询当前队列最大值,即直接返回队列前端def front(self):return self.queue[0]class Solution(object):def maxSlidingWindow(self, nums, k):""":type nums: List[int]:type k: int:rtype: List[int]"""que = MyQueue()result = []#先放前k个元素for i in nums[:k]:que.push(i)result.append(que.front())for i in range(k, len(nums)):que.pop(nums[i - k])que.push(nums[i])result.append(que.front())return result

3.347. 前 K 个高频元素

题目链接:前 K 个高频元素
文档讲解: 代码随想录

暴力解法

class Solution(object):def topKFrequent(self, nums, k):""":type nums: List[int]:type k: int:rtype: List[int]"""#统计出现频率time_dict = defaultdict(int)for i in nums:time_dict[i] += 1#定义字典,key为出现次数,value是对应的数字index_dict = defaultdict(list)for key in time_dict:#新字典将相同频率的数字放在同一个列表中index_dict[time_dict[key]].append(key)#升序key = list(index_dict.keys())key.sort()res = []count = 0#获取前k项# +=: 将右侧的可迭代对象中的元素追加到左侧的列表中while key and count != k:res += index_dict[key[-1]]count += len(index_dict[key[-1]])#移除列表最后一个元素key.pop()return res[:k]  
import heapqclass Solution(object):def topKFrequent(self, nums, k):""":type nums: List[int]:type k: int:rtype: List[int]"""#定义字典统计频率mapping = {}for i in range(len(nums)):mapping[nums[i]] = mapping.get(nums[i], 0) + 1#定义一个大小为k的小顶堆,对频率进行排序pri_que = []for key, freq in mapping.items():heapq.heappush(pri_que, (freq, key))if len(pri_que) > k:heapq.heappop(pri_que)#找出前k个高频元素,小顶堆先弹出最小的,所以要倒数输出数组res = [0] * kfor i in range(k - 1, -1, -1):res[i] = heapq.heappop(pri_que)[1]return res

总结

在python中,栈的元素在内存中并不是连续分布的,其通常通过列表来实现,列表中的元素并不一定是连续分布的,是个动态数组,元素存储在堆内存中,并不要求连续的内存块。

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

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

相关文章

数据仓库哈哈

数据仓库 基本概念数据库(database)和数据仓库(Data Warehouse)的异同 整体架构分层架构方法论ER模型(建模理论)维度模型 何为分层第一层:数据源(ODS ER模型)设计要点日志…

华为机考真题 -- 小明找位置

题目描述: 小朋友出操,按学号从小到大排成一列;小明来迟了,请你给小明出个主意,让他尽快找到他应该排的位置。算法复杂度要求不高于nLog(n);学号为整数类型,队列规模<=10000; 输入描述: 1、第一行:输入已排成队列的小朋友的学号(正整数),以”,”隔开;例如:…

Studying-代码随想录训练营day34| 62.不同路径、63.不同路径II、343.整数拆分、96.不同的二叉搜索树

第34天&#xff0c;动态规划part02&#xff0c;牢记五部曲步骤&#xff0c;编程语言&#xff1a;C 目录 62.不同路径 63.不同路径II 343.整数拆分 96.不同的二叉搜索树 总结 62.不同路径 文档讲解&#xff1a;代码随想录不同路径 视频讲解&#xff1a;手撕不同路径 题目…

CPU/内存/综合性能评估工具汇总-2:stream

目录 一、概括二、stream 一、概括 嵌入式开发中对要设计的产品、立项的项目进行设计时&#xff0c;往往需要对关键芯片进行性能评估&#xff0c;本文主要总结基于linux系统的产品在性能评估时的工具使用总结&#xff0c;在aarch64(arm64平台下测试)&#xff0c;板卡根文件系统…

源码编译构建LAMP(企业网站架构部署与优化)

部署LAMP平台 LAMV架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词&#xff0c;具体包 括 Linux操作系统&#xff0c;Apache网站服务器、MySQL数据库服务器、P…

【Python】基础语法体系:两种常用语句

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️Python】 文章目录 前言条件语句动态实例if语句if-else 语句if-elif-else 语句嵌套条件语句 循环语句for循环while循环 动态实例嵌套循环 前言 Python语句是构成Python程序的基本单元&#xff0c;用…

优化VOI(Virtual Operating System Infrastructure,虚拟操作系统基础架构)架构的性能

优化VOI&#xff08;Virtual Operating System Infrastructure&#xff0c;虚拟操作系统基础架构&#xff09;架构的性能&#xff0c;可以从多个方面入手&#xff0c;以确保系统能够更高效、更稳定地运行。以下是一些优化建议&#xff1a; 1. 优化硬件资源利用 本地硬件资源最…

JavaScript 基础:掌握JavaScript基础语法(一)

一、JavaScript 字面量 在编程语言中&#xff0c;一般固定值称为字面量&#xff0c;如 3.14。 1&#xff09;数字&#xff08;Number&#xff09;字面量 可以是整数或者是小数&#xff0c;或者是科学计数(e)。 3.14 1001 123e5 2&#xff09;字符串&#xff08;String&…

磁力猫官网cilimao,获取磁力链接的操作步骤

磁力猫磁力链接是一种特殊的下载链接&#xff0c;磁力猫磁力链接可以理解为一个文件识别码&#xff0c;而并非具体的资源地址&#xff0c;下载软件需要拿着这个识别码去整个互联网(DHT网络)去寻找持有该资源的用户(节点)&#xff0c;如果找到则可以进行传输下载。一般年代越久远…

Innodisk宣布启用第二期研发与生产中心,发力扩展边缘AI解决方案产能

Innodisk 公司于2024年7月9日在台湾宜兰揭幕了其研发与生产中心第二阶段&#xff0c;旨在扩大边缘人工智能&#xff08;Edge AI&#xff09;解决方案的生产能力。此举是对边缘AI浪潮所带动的庞大市场需求的直接响应&#xff0c;标志着公司将制造工厂转变为集团AI核心基地的重要…

C++之goto陈述

关键字 goto用于控制程式执行的顺序&#xff0c;使程式直接跳到指定标签(lable) 的地方继续执行。 形式如下 标签可以是任意的识别字&#xff0c;后面接一个冒号。 举例如下 #include <iostream>int main() {goto label_one;label_one: {std::cout << "Lab…

Taro自定义实现本地路径转换为文件

在用Taro写头像上传功能时&#xff0c;因为需要对获得的图片进行剪切成圆形或方形。使用组件剪切完之后返回的是一个本地图片的相对路径。这个时候我们就需要自己实现将本地路径重新转换为二进制文件。 引入两个js文件 mimeMap.js module.exports {"0.001": &quo…

vue3 插件

富文本插件 wangeditor https://www.wangeditor.com/v5/for-frame.html 官网地址 安装 yarn add wangeditor/editor # 或者 npm install wangeditor/editor --saveyarn add wangeditor/editor-for-vuenext # 或者 npm install wangeditor/editor-for-vuenext --save使用impor…

凸包——G - Highest Ratio

G - Highest Ratio 来源&#xff1a;AtCoder Beginner Contest 341-G 题目描述&#xff1a; 给定长度为 N N N 的序列 A ( A 1 , A 2 , … , A N ) A (A_1, A_2, \ldots, A_N) A(A1​,A2​,…,AN​)。 对于每个 k 1 , 2 , … , N k 1, 2, \ldots, N k1,2,…,N&#…

看懂什么是Halo2

目录 Halo2(零知识证明框架)是什么 Halo2概述 Halo2的原理 电路开发 斐波那契数列举例说明 Halo2的应用 结论 PLONK算法是什么 PLONK算法概述 PLONK算法原理 1. 电路描述与约束 2. 多项式表达与验证 3. 初始设置与随机性 PLONK举例说明 PLONK例子:验证简单的…

【漏洞复现】29网课交单平台 SQL注入

声明&#xff1a;本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动&#xff0c;将与本文档的作者或发布者无关。 一、漏洞描述 29网课交单平台是一个在线学习平台&#xff0c;用于帮助学生完成网络课程的学习任务。这个平台提供了包括…

Transformer中的编码器和解码器结构有什么不同?

Transformer背后的核心概念&#xff1a;注意力机制&#xff1b;编码器-解码器结构&#xff1b;多头注意力等&#xff1b; 例如&#xff1a;The cat sat on the mat&#xff1b; 1、嵌入&#xff1a; 首先&#xff0c;模型将输入序列中的每个单词嵌入到一个高维向量中表示&…

前端面试题34(在移动应用中,通用的实时传输协议)

在移动应用中&#xff0c;选择实时传输协议时通常会考虑几个关键因素&#xff1a;网络效率、功耗、实时性、跨平台兼容性以及数据类型&#xff08;如文本、图像、视频&#xff09;。以下是几种常用的实时传输协议及其在移动应用中的适用性&#xff1a; 1. WebSocket WebSocke…

华为od 100问 持续分享-2

我是一名软件开发培训机构老师&#xff0c;我的学生已经有上百人通过了华为OD机试&#xff0c;学生们每次考完试&#xff0c;会把题目拿出来一起交流分享。 重要&#xff1a;2024年5月份开始&#xff0c;考的都是OD统一考试&#xff08;D卷&#xff09;&#xff0c;题库已经整…

AI转绘_animatediff-cli-prompt-travel

这个工具有两种主要模式&#xff1a;它可以直接通过提示创建视频&#xff0c;或者它可以对现有视频进行风格化。还有方法可以提高视频的分辨率。 正如工具名称所示&#xff0c;它的一个主要特点是"提示旅行"。这意味着你可以例如使用特定的提示用于前20帧&#xff0…