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

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

我们先来看思路与算法:

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

  • 如果操作是 +,那么访问数组的后两个得分,将两个得分之和加到总得分,并且将两个得分之和入栈。
  • 如果操作是 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.lqws.cn/news/196183.html

相关文章:

  • Android LinearLayout、FrameLayout、RelativeLayout、ConstraintLayout大混战
  • Docker、Wsl 打包迁移环境
  • JAVA-springboot log日志
  • Android第十五次面试总结(第三方组件和adb命令)
  • 通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
  • Java编程之原型模式
  • python并发编程
  • 【C++ 真题】P1747 好奇怪的游戏
  • 【数据结构初阶】单链表
  • 计算机操作系统(十五)死锁的概念与死锁的处理方法
  • 使用VHD虚拟磁盘安装双系统,避免磁盘分区
  • C语言:数据的存储
  • SQL Server全局搜索:在整个数据库中查找特定值的高效方法
  • 个人电脑部署本地大模型+UI
  • 从混乱到秩序:探索管理系统如何彻底改变工作流程
  • C++指针(二)
  • 怎么解决cesium加载模型太黑,程序崩溃,不显示,位置不对模型太大,Cesium加载gltf/glb模型后变暗
  • Windows账户管理,修改密码,创建帐户...(无需密码)
  • Python打卡第46天
  • N8N概述
  • [假面骑士] 龙骑浅谈
  • 第三章支线一 ·原能之核:语法起源
  • 驱控边界在哪里?知名舵机品牌伟创动力CNTE2025展带来答案
  • Vue基础(14)_列表过滤、列表排序
  • Python打卡训练营day46——2025.06.06
  • 【动手学深度学习】3.1. 线性回归
  • string类(详解)
  • 从零开始的python学习(七)P95+P96+P97+P98+P99+P100+P101
  • 【知识扫盲】如何由inq,ouq和totaltime计算tokens/s
  • Unity3D仿星露谷物语开发60之定制角色其他部位