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

模拟法解题的思路与算法分享

我们先来看思路与算法:

使用变长数组对栈进行模拟。

  • 如果操作是 +,那么访问数组的后两个得分,将两个得分之和加到总得分,并且将两个得分之和入栈。
  • 如果操作是 D,那么访问数组的最后一个得分,将得分乘以 2 加到总得分,并且将得分乘以 2 入栈。
  • 如果操作是 C,那么访问数组的最后一个得分,将总得分减去该得分,并且将该得分出栈。
  • 如果操作是整数,那么将该整数加到总得分,并且将该整数入栈。

代码

Python3

class Solution:def calPoints(self, ops: List[str]) -> int:ans = 0points = []for op in ops:if op == '+':pt = points[-1] + points[-2]elif op == 'D':pt = points[-1] * 2elif op == 'C':ans -= points.pop()continueelse:pt = int(op)ans += ptpoints.append(pt)return ans

C++

class Solution {
public:int calPoints(vector<string>& ops) {int ret = 0;vector<int> points;for (auto &op : ops) {int n = points.size();switch (op[0]) {case '+':ret += points[n - 1] + points[n - 2];points.push_back(points[n - 1] + points[n - 2]);break;case 'D':ret += 2 * points[n - 1];points.push_back(2 * points[n - 1]);break;case 'C':ret -= points[n - 1];points.pop_back();break;default:ret += stoi(op);points.push_back(stoi(op));break;}}return ret;}
};

Java

class Solution {public int calPoints(String[] ops) {int ret = 0;List<Integer> points = new ArrayList<Integer>();for (String op : ops) {int n = points.size();switch (op.charAt(0)) {case '+':ret += points.get(n - 1) + points.get(n - 2);points.add(points.get(n - 1) + points.get(n - 2));break;case 'D':ret += 2 * points.get(n - 1);points.add(2 * points.get(n - 1));break;case 'C':ret -= points.get(n - 1);points.remove(n - 1);break;default:ret += Integer.parseInt(op);points.add(Integer.parseInt(op));break;}}return ret;}
}

复杂度分析

时间复杂度:O(n) ,其中 n 为数组 ops 的大小。遍历整个 ops 需要 O(n) 。
空间复杂度:O(n) 。变长数组最多保存 O(n) 个元素。

好了,今天的文章分享就到这里了,希望对大家的学习有帮助哦!

http://www.lryc.cn/news/2404666.html

相关文章:

  • mysql密码正确SpringBoot和Datagrip却连接不上
  • 高保真组件库:数字输入框
  • 人工智能赋能高中学科教学的应用与前景研究
  • 【Linux】awk 命令详解及使用示例:结构化文本数据处理工具
  • 紫光同创FPGA系列实现Aurora 8b/10b协议
  • DAY 44 预训练模型
  • [Harmony]颜色初始化
  • 指针与函数参数传递详解 —— 值传递与地址传递的区别及应用
  • 【NLP中向量化方式】序号化,亚编码,词袋法等
  • C++学习-入门到精通【16】自定义模板的介绍
  • 关于脏读,幻读,可重复读的学习
  • 源码级拆解:如何搭建高并发「数字药店+医保购药」一体化平台?
  • 旅行商问题(TSP)的 C++ 动态规划解法教学攻略
  • unix/linux,sudo,其内部结构机制
  • Hadoop 3.x 伪分布式 8088端口无法访问问题处理
  • Redis线程安全深度解析:单线程模型的并发智慧
  • 零基础在实践中学习网络安全-皮卡丘靶场(第十期-Over Permission 模块)
  • 北京大学肖臻老师《区块链技术与应用》公开课:12-BTC-比特币的匿名性
  • [Harmony]网络状态监听
  • 毕设 基于机器视觉的驾驶疲劳检测系统(源码+论文)
  • Ubuntu18.6 学习QT问题记录以及虚拟机安装Ubuntu后的设置
  • Vue3中computed和watch的区别
  • 发版前后的调试对照实践:用 WebDebugX 与多工具构建上线验证闭环
  • 瀚文(HelloWord)智能键盘项目深度剖析:从0到1的全流程解读
  • Shell编程核心符号与格式化操作详解
  • 针对“仅某个地区出现Bug”的原因分析与解决方案
  • 学习STC51单片机30(芯片为STC89C52RCRC)
  • sql中group by使用场景
  • 将HTML内容转换为Canvas图像,主流方法有效防止文本复制
  • Python-进程