技术面 - 手撕算法题整理

503 篇文章

已下架不支持订阅

406 篇文章

已下架不支持订阅

153 篇文章

已下架不支持订阅

LeetCode原题

刷题策略:优先刷"hot100"的题目,其次"刷频次高"的题目,最后再刷剩余的

题目编号 频次 难度 hot100

已下架不支持订阅

### 华为OD Python 技术试常见代码题目及解答 #### 逆波兰表达式求值 对于给定的逆波兰表示法(Reverse Polish Notation, RPN),编写函数计算其数值。 ```python def evalRPN(tokens): res = [] for i in tokens: if i == "+": a = res.pop() b = res.pop() res.append(b + a)[^1] elif i == "-": a = res.pop() b = res.pop() res.append(b - a) elif i == "*": a = res.pop() b = res.pop() res.append(b * a) elif i == "/": a = res.pop() b = res.pop() if (a > 0 and b < 0) or (a < 0 and b > 0): res.append(abs(b) // abs(a) * (-1)) else: res.append(b // a) else: res.append(int(i)) return res[-1] ``` 该算法利用栈来处理操作数和运算符。遇到数字则压入栈中;遇到运算符,则弹出两个最近的操作数执行相应运算,并将结果重新压回栈顶。最终栈内仅剩下一个元素即为所求的结果。 时间复杂度分析表明,此方法遍历一次输入列表中的每一个token,在最坏情况下每个token都需要进行常量时间内完成的一系列操作(如加减乘除)。因此整体时间复杂度为O(n),其中n代表tokens的数量。 空间复杂度方,由于使用了一个额外的数据结构——栈来存储中间结果以及待处理的操作数,所以所需的空间大小取决于表达式的长度及其嵌套程度。理想状态下,当所有的操作都是连续的二元运算时,最多只需要保存一半数量级的操作数于栈上等待匹配相应的右操作数参与计算过程。故而平均情况下的空间开销大约也是线性的,记作O(m),这里m指的是实际存放在res数组里的最大数目。
评论 46
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿甘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值