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

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

我们先来看思路与算法:

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

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

相关文章:

  • [GitHub] 优秀开源项目
  • python训练营打卡第47天
  • 27、基于map实现的简易kv数据库
  • AIGC的产品设计演进:从工具到协作者
  • 黑马Sting四道练习题
  • 《Progressive Transformers for End-to-End Sign Language Production》复现报告
  • windows使用脚本杀死python进程
  • STM32学习之I2C(理论篇)
  • Addressable-配置相关
  • 操作系统:分页存储管理方式(精简版、含例题)
  • 源码级拆解:如何搭建高并发「数字药店+医保购药」一体化平台?
  • 6.7 打卡
  • AtCoder Beginner Contest 408 D-F 题解
  • JDK8安装与配置
  • 探索Python融合地学:斗之气七段(运算符)
  • 冰箱智能化升级方案:WT3000A离在线AI语音模组赋能AI在线对话功能
  • Cline核心说明文档
  • 基于Java的离散数学题库系统设计与实现:附完整源码与论文
  • mysql整体架构
  • 在 Windows 11 或 10 上将 Visual Studio Code 添加到系统路径
  • C++学习-入门到精通【15】异常处理深入剖析
  • (附实例代码及图示)混合策略实现 doc-doc 对称检索
  • FreeRTOS任务调度过程vTaskStartScheduler()任务设计和划分
  • redis分布式锁
  • Python训练营打卡DAY47
  • 4G物联网模块提升智慧农业的自动化生产效率
  • 【CSS-5】深入理解CSS复合选择器:提升样式表的精确性与效率
  • 第三章支线二 ·函数幻阶:语法召唤与逻辑封印
  • A Execllent Software Project Review and Solutions
  • 函数式接口实现分页查询