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

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

150. 逆波兰表达式求值

题目

在这里插入图片描述

思路与解法

第一思路: 比较简单

class Solution:def evalRPN(self, tokens: List[str]) -> int:stack = []for item in tokens:if item != '+' and item != '-' and item != '*' and item != '/' :stack.append(item)else:b = int(stack.pop())a = int(stack.pop())if item == '+':stack.append(a + b)elif item == '-':stack.append(a - b)elif item == '*':stack.append(a * b)elif item == '/':stack.append(a/b)return int(stack.pop())

239. 滑动窗口最大值

题目

在这里插入图片描述

思路与解法

第一思路:

carl的思路 : 滑动窗口解法,值得后面认真看看细节,归纳一下

from collections import deque
class MyQueue(object): # 单调队列def __init__(self):self.queue = deque()def pop(self, value):if self.queue and value == self.queue[0]:return self.queue.popleft()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:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:myque = MyQueue()res = []lens = len(nums)i=0if i + k <= lens:while i < k:myque.push(nums[i])i += 1res.append(myque.front())i=1while i + k <= lens:myque.pop(nums[i-1])myque.push(nums[i+k-1])res.append(myque.front())i += 1return res

347.前 K 个高频元素

题目

在这里插入图片描述

思路与解法

第一思路: 先统计数量,在得出前k多的值。但是不知道怎么实现。有点被误导,因为要很技巧性,其实感觉很粗暴
carl的讲解: 先用字典统计,再将字典key-value互换,然后将互换后的keys(values)方法到list中,进行排序,得出按顺序的出现次数,再通过出现次数去找对应的值。

class Solution:def topKFrequent(self, nums: List[int], k: int) -> List[int]:from collections import defaultdictres = []item_dict = defaultdict(int)for item in nums:item_dict[item] += 1time_dict = defaultdict(list) for key in item_dict.keys():time_dict[item_dict[key]].append(key)times = time_dict.keys()times = list(times)times.sort() # 从小往大count = 0 # 记载存入res中的总个数while count < k:res.extend(time_dict[times[-1]])count += len(time_dict[times[-1]])times.pop()return res

相关文章:

  • 安卓应用卡顿、性能低下的背后原因
  • goner/otel 在Gone框架接入OpenTelemetry
  • stable-diffusion windows本地部署
  • Spring AI 集成 DeepSeek V3 模型开发指南
  • 【C++】C++函数指针详解与实用技巧
  • 小白借助ai对全栈进行浅浅理解(学习笔记)-Lambda、Optional 避免空指针与新的日期时间 API
  • 南邮计科电工电子实验第五次课与非门设计数字锁逻辑电路小测答案
  • 线程池的核心参数和线程创建方式,线程和进程
  • 介绍Unity中的Dictionary
  • 【RAG技术全景解读】从原理到工业级应用实践
  • 树莓派5+Ubuntu24.04 LTS串口通信 保姆级教程
  • Mockoon 使用教程
  • 解决:‘java‘ 不是内部或外部命令,也不是可运行的程序-Java环境变量配置(含JDK8、JDK21安装包一站式配置)
  • 垃圾厌氧堆肥发酵实验台试验装置
  • 直接用字符串方式 split(“。“) 来切句,虽然能把句子拆开,但无法和 BERT 模型的 token 位置对应(embedding 用不上)
  • 两种方法求解最长公共子序列问题并输出所有解
  • Android学习总结之算法篇八(二叉树和数组)
  • 可视化图解算法35:在二叉树中找到两个节点的最近公共祖先(二叉树的最近公共祖先)
  • 【LeetCode】删除排序数组中的重复项 II
  • 2025年渗透测试面试题总结-某步在线面试(题目+回答)
  • 中国象棋协会坚决支持司法机关依法打击涉象棋行业的违法行为
  • 以总理内塔尼亚胡称决心彻底击败哈马斯
  • 2024年上市公司合计实现营业收入71.98万亿元
  • 商务部再回应中美经贸高层会谈:美方要拿出诚意、拿出行动
  • 马新民卸任外交部条约法律司司长
  • 特朗普政府拟终止太空污染研究,马斯克旗下太空公司将受益