leetcode682-Baseball Game

题目:

你现在是一场采用特殊赛制棒球比赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。
比赛开始时,记录是空白的。你会得到一个记录操作的字符串列表 ops,其中 ops[i] 是你需要记录的第 i 项操作,ops 遵循下述规则:
整数 x - 表示本回合新获得分数 x
“+” - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。
“D” - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。
“C” - 表示前一次得分无效,将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。
请你返回记录中所有得分的总和。
示例 1:
输入:ops = [“5”,“2”,“C”,“D”,“+”]
输出:30
解释:
“5” - 记录加 5 ,记录现在是 [5]
“2” - 记录加 2 ,记录现在是 [5, 2]
“C” - 使前一次得分的记录无效并将其移除,记录现在是 [5].
“D” - 记录加 2 * 5 = 10 ,记录现在是 [5, 10].
“+” - 记录加 5 + 10 = 15 ,记录现在是 [5, 10, 15].
所有得分的总和 5 + 10 + 15 = 30

分析

当前得分的方式有可能是上一次的得分,同时也可能会清空上一次得分,这种很明显适合用先入后出的数据结构,因此栈可以解决这个问题,尤其注意元素是+的时候,先要弹出元素才能取到倒数第二次的分数
同时我们用数组也可以解这个问题,用一个哨兵来标示当前数组的有效位,同时一定要注意最终算总成绩的时候遍历数组不能超过该哨兵(元素是C的时候哨兵会减1,所以哨兵前面的元素才是有效分数)

import java.util.Deque;
import java.util.LinkedList;
import java.util.Arrays;public class baseballGame {public static void main(String[] args) {String[] arr = {"5","2","C","D","+"};System.out.println(getScoreArray(arr));}public static int getScoreArray(String[] arr) {int[] count = new int[arr.length];int index = 0;for(String str : arr) {if("D".equals(str)) {count[index] = count[index-1] * 2;index++;} else if("+".equals(str)) {count[index] = count[index-1] + count[index-2];index++;} else if("C".equals(str)) {index--;} else {count[index] = Integer.valueOf(str);index++;}}int sum = 0;for(int i = 0;i<index;i++) {sum = sum + count[i];}return sum;}public static int getScore(String[] arr) {Deque stack = new LinkedList();for(int i = 0;i<arr.length;i++) {if(arr[i].charAt(0) == 'C') {stack.pop();} else if(arr[i].charAt(0) == 'D') {int val = (int) stack.peek();stack.push(val * 2);} else if(arr[i].charAt(0) == '+') {int first = (int) stack.peek();stack.pop();int second = (int) stack.peek();stack.push(first);stack.push(first+second);} else {stack.push(Integer.valueOf(arr[i]));}}int sum  = 0;while(stack.size() > 0) {sum = sum + (int)stack.peek();stack.pop();}return sum;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构设计-订单系统之业务的设计与实现

一、背景简介 订单业务一直都是系统研发中的核心模块&#xff0c;订单的产生过程&#xff0c;与系统中的很多模块都会高度关联&#xff0c;比如账户体系、支付中心、运营管理等&#xff0c;即便单看订单本身&#xff0c;也足够的复杂&#xff1b; 业务在发展的过程中&#xff…

Go gorm库(详细版)

目录 01. 什么是ORM 02. 环境搭建 03. 连接数据库 高级设置 gorm 的命名策略 创建表 日志显示 04. 模型定义 定义一张表 自动生成表结构 修改表字段大小 字段标签 05. 单表查询 5.1 表结构 5.2 添加单条记录 5.3 批量插入 5.4 单条数据查询 5.5 根据主键查询…

Vue3学习03 pinia

Vue3学习 pinia pinia一个简单效果搭建 pinia 环境存储读取数据示例 修改数据 (三种方式)storeToRefsgetters$subscribestore组合式写法 pinia 在vue2中使用vuex&#xff0c;在vue3中使用pinia。 集中式状态管理&#xff0c;&#xff08;状态数据&#xff09;。多个组件共享数…

多态【C/C++复习版】

目录 一、多态是什么&#xff1f;如何实现&#xff1f; 二、 什么是重写&#xff1f;有什么特点&#xff1f; 三、什么是协变&#xff1f; 四、析构函数能实现多态吗&#xff1f;为什么要实现&#xff1f; 五、override和final的作用是什么&#xff1f; 六、 多态的原理是…

Linux下网络编程基础知识--协议

网络基础 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 协议 一组规则, 数据传输和数据的解释的规则。 比如说依次发送文件的文件名, 文件的大小, 以及实际的文件, 这样规定发送一个文件的顺序以及发送的每一个部分的格式等可以算是一种协议 型协议 …

防火墙用户管理技术——AAA

目录 一.AAA功能 (1).认证方式 (2).授权方式 (3).计费方式 二.RADUIUS协议 三.用户组织架构及管理 管理员认证登录方式 1.console 2.web 3.telnet 4.ssh 5.ftp 四.认证方式 五.AAA远程登录 1.端口添加IP地址达到互通 2.AAA视图进行配置 3.结果​编辑 一.AAA功能…

Android源码解析之截屏事件流程

今天这篇文章我们主要讲一下Android系统中的截屏事件处理流程。用过android系统手机的同学应该都知道&#xff0c;一般的android手机按下音量减少键和电源按键就会触发截屏事件&#xff08;国内定制机做个修改的这里就不做考虑了&#xff09;。那么这里的截屏事件是如何触发的呢…

【Redis深度解析】揭秘Cluster(集群):原理、机制与实战优化

Redis Cluster是Redis官方提供的分布式解决方案&#xff0c;通过数据分片与节点间通信机制&#xff0c;实现了水平扩展、高可用与数据容灾。本文将深入剖析Redis Cluster的工作原理、核心机制&#xff0c;并结合实战经验分享优化策略&#xff0c;为您打造坚实可靠的Redis分布式…

双数据库的安装

双MySQL的安装 【0】前言 ​ 本地已经安装过mysql5.1版本&#xff0c;应项目需求需要安装mysql5.7版本&#xff1b; ​ 官方网站下载对应版本&#xff1a;https://downloads.mysql.com/archives/community/ 【1】压缩包下载完成后解压至本地磁盘 【2】进入根目录下bin文件夹…

Flask基于flask_login实现登录、验证码

flask_login 是一个 Flask 扩展&#xff0c;用于在 Flask web 应用中实现用户会话管理。它允许你跟踪哪些用户已经登录&#xff0c;并管理他们的登录状态。flask_login 提供了用户认证的基础结构&#xff0c;但具体的用户验证&#xff08;如用户名和密码检查&#xff09;和存储…

泽众Testone自动化测试平台,测试用例支持单个调试执行,同步查看执行日志

泽众Testone自动化测试平台之前版本&#xff0c;测试用例批量和单个执行&#xff0c;必须要通过测试集操作执行&#xff0c;操作略繁琐&#xff0c;我们通过本轮优化升级&#xff0c;测试用例直接可以单个调试执行&#xff0c;同步查看执行日志&#xff0c;操作上去繁就简&…

OJ刷题日记:1、双指针(1)

目录 1、283.移动零 2、1089.复写零 3、202.快乐数 1、283.移动零 题目&#xff1a; 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 …

第十届 蓝桥杯 单片机设计与开发项目 省赛

第十届 蓝桥杯 单片机设计与开发项目 省赛 输入&#xff1a; 频率信号输入模拟电压输入 输出&#xff08;包含各种显示功能&#xff09;&#xff1a; LED显示SEG显示DAC输出 01 数码管显示问题&#xff1a;数据类型 bit Seg_Disp_Mode;//0-频率显示界面 1-电压显示界面 un…

电脑无法开机?原因分析与解决方案

电脑无法开机是一种常见的问题&#xff0c;可能会给用户带来诸多困扰。无法启动可能是由于硬件故障、软件问题或者其他未知原因引起的。在本文中&#xff0c;我们将介绍三种常见的方法来解决电脑无法开机的问题&#xff0c;以帮助用户尽快恢复正常使用。 方法1&#xff1a;检查…

6、ipex-llm(原bigdl-llm)大模型微调

ipex-llm环境配置及模型下载 QLORA是一种高效微调方法&#xff0c;可以将内存使用降低到足以在单个48GB GPU上微调一个拥有65B参数的模型&#xff0c;同时保持完整的16位微调任务性能。QLORA通过一个冻结的、4位量化的预训练语言模型将梯度反向传播到低秩适配器&#xff08;Lo…

什么是队列

队列是一种特殊类型的线性表&#xff0c;其只允许在一端进行插入操作&#xff0c;而在另一端进行删除操作。具体来说&#xff0c;允许插入的一端称为队尾&#xff0c;而允许删除的一端称为队头。这种数据结构遵循“先进先出”&#xff08;FIFO&#xff09;的原则&#xff0c;即…

python实现OCR

python实现OCR 在Python中实现OCR&#xff08;光学字符识别&#xff09;通常需要使用第三方库&#xff0c;如pytesseract。以下是使用pytesseract进行OCR的基本步骤&#xff1a; 安装pytesseract和相关的OCR库&#xff0c;如tesseract-ocr。 使用pytesseract库的image_to_str…

从字符串到JSON对象:解析MinIO配置的Java实践

在日常开发中&#xff0c;我们经常需要从外部配置源&#xff08;如参数配置、环境变量、配置文件等&#xff09;获取服务所需的特定配置信息。本文将以一个具体需求为例&#xff0c;介绍如何使用Java处理字符串形式的MinIO存储服务配置&#xff0c;将其转化为JSON对象并提取关键…

ubuntu安装irtualbox注意事项

下载官网7.0版本&#xff0c;ubuntu22.04,安装一直出错误&#xff0c;查到了下面兄弟的办法&#xff0c;仍然不幸&#xff0c;最后使用apt重装&#xff0c;请按第二部分流程安装&#xff0c;安装6.1,可以用 第一部分&#xff0c;反正我是没搞通&#xff0c;7.0反复的出现相同的…

C语言读取 .ico 文件并显示数据

原来是想做光标编辑器&#xff0c;自己把绘图板的内容导出为光标格式 鼠标指针文件格式解析——Windows&#xff08;一&#xff09; (qq.com) 代码来源自 Icons | Microsoft Learn 鄙人又补充些变量可以运行微软的代码 简单代码如下 #include <stdio.h> #include &l…