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

算法每日一题:保龄球游戏的获胜者

大家好,我是星恒

今天的每一一题是一道简单题目,但是没能秒掉,原因就是题意理解不到位,边界问题没有判断清楚
不过这本来就是一个试错,迭代,积累经验的过程,加油加油,相信做多了,自然就可以秒掉啦!

题目:
给你两个下标从 0 开始的整数数组 player1 和 player2 ,分别表示玩家 1 和玩家 2 击中的瓶数。
保龄球比赛由 n 轮组成,每轮的瓶数恰好为 10 。
假设玩家在第 i 轮中击中 xi 个瓶子。玩家第 i 轮的价值为:

  • 如果玩家在该轮的前两轮的任何一轮中击中了 10 个瓶子,则为 2xi 。
  • 否则,为 xi 。

玩家的得分是其 n 轮价值的总和。
返回

  • 如果玩家 1 的得分高于玩家 2 的得分,则为 1 ;
  • 如果玩家 2 的得分高于玩家 1 的得分,则为 2 ;
  • 如果平局,则为 0 。
    示例:
    示例 1:
输入:player1 = [4,10,7,9], player2 = [6,5,2,3]
输出:1
解释:player1 的得分是 4 + 10 + 2*7 + 2*9 = 46 。
player2 的得分是 6 + 5 + 2 + 3 = 16 。
player1 的得分高于 player2 的得分,所以 play1 在比赛中获胜,答案为 1 。

示例 2:

输入:player1 = [3,5,7,6], player2 = [8,10,10,2]
输出:2
解释:player1 的得分是 3 + 5 + 7 + 6 = 21 。
player2 的得分是 8 + 10 + 2*10 + 2*2 = 42 。
player2 的得分高于 player1 的得分,所以 play2 在比赛中获胜,答案为 2 。

示例 3:

输入:player1 = [2,3], player2 = [4,1]
输出:0
解释:player1 的得分是 2 + 3 = 5 。
player2 的得分是 4 + 1 = 5 。
player1 的得分等于 player2 的得分,所以这一场比赛平局,答案为 0 。

提示:

  • n == player1.length == player2.length
  • 1 <= n <= 1000
  • 0 <= player1[i], player2[i] <= 10

分析:
这道题最主要的事理解题意,注意他说的前两个元素为10,是说的任意元素的前两个元素
还有注意0,1的边界问题,要分类讨论,最后如果能合并就合并了

题解:
题解一:最无脑题解

class Solution {public int isWinner(int[] player1, int[] player2) {if (player1.length == 1) {if (player1[0] > player2[0]) {return 1;} else if (player1[0] < player2[0]) {return 2;} else {return 0;}}int score1 = sumScore(player1);int score2 = sumScore(player2);if (score1 > score2) {return 1;} else if (score1 < score2) {return 2;} else {return 0;}}public int sumScore(int[] player) {int score = 0;if (player[0] == 10) {score = player[0] + 2 * player[1];} else {score = player[0] + player[1];}for (int i = 2; i < player.length; i++) {if (player[i - 1] == 10 || player[i - 2] == 10) {score += 2 * player[i];} else {score += player[i];}}return score;}
}

优化:(两种方式的本质是一样的,只是第二种的写法更优雅!)

class Solution {public int isWinner(int[] player1, int[] player2) {int s1 = score(player1);int s2 = score(player2);return s1 == s2 ? 0 : s1 > s2 ? 1 : 2;}public int score(int[] player) {int res = 0;for (int i = 0; i < player.length; i++) {if ((i > 0 && player[i - 1] == 10) || (i > 1 && player[i - 2] >= 10)) {res += 2 * player[i];} else {res += player[i];}}return res;}

优化点:

  • 三重if如何使用 **条件运算符 **来表达
  • 边界0 和 1,如何更优雅的处理
    • 写出来后,看看能不能和主要处理函数合并
      • 0:当是0的时候,res 就是本身
      • 1:当是1的时候,两种情况(第一个为10,第一个不为10),如何判断呢,判断i - 1 是否为10
      • i > 0 && player[i - 1] == 10) || (i > 1 && player[i - 2] >= 10
      • 所以这个i > 0就很妙,一语双关,太妙了呀,不过说实话,不好想
    • 其实这里主要得到这个经验:
      • 当后面的计算和前两个有关时,一定要特殊判断第一个情况和第二个情况

相关文章:

算法每日一题:保龄球游戏的获胜者

大家好&#xff0c;我是星恒 今天的每一一题是一道简单题目&#xff0c;但是没能秒掉&#xff0c;原因就是题意理解不到位&#xff0c;边界问题没有判断清楚 不过这本来就是一个试错&#xff0c;迭代&#xff0c;积累经验的过程&#xff0c;加油加油&#xff0c;相信做多了&…...

Do you know about domestic CPUs

Do you know about domestic CPUs CPU指令集国产CPU CPU指令集 国产CPU 参考文献 国产CPU之4种架构和6大品牌指令集及架构一文深入了解 CPU 的型号、代际架构与微架构国产GPU芯片厂商有哪些深入GPU硬件架构及运行机制详解服务器GPU架构和基础知识...

软件设计模式 --- 类,对象和工厂模式的引入

Q1&#xff1a;什么是软件设计模式&#xff1f; A&#xff1a;软件设计模式&#xff0c;又称设计模式。它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。综上&…...

LeetCode74二分搜索优化:二维矩阵中的高效查找策略

题目描述 力扣地址 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&…...

三极管组成的光控开关电路原理图

什么是光控开关 光控开关/光控时控器采用先进的嵌入式微型计算机控制技术&#xff0c;融光控功能和普通时控器两大功能为一体的多功能高级时控器&#xff08;时控开关&#xff09;&#xff0c;根据节能需要可以将光控探头&#xff08;功能&#xff09;与时控功能同时启用&…...

【PostgreSQL】从零开始:(四十二)系统列

PostgreSQL 中的系统列 PostgreSQL 中的系统列是一组特殊的列&#xff0c;用于存储关于表和视图的元数据信息。这些列是由 PostgreSQL 数据库自动创建和维护的&#xff0c;并且不能直接修改或删除。 每个表都有多个系统列&#xff0c;这些列由系统隐式定义。因此&#xff0c;…...

快速、准确地检测和分类病毒序列分析工具 ViralCC的介绍和详细使用方法, 附带应用脚本

介绍 viralcc是一个基因组病毒分析工具&#xff0c;可以用于快速、准确地检测和分类病毒序列。 github&#xff1a;dyxstat/ViralCC: ViralCC: leveraging metagenomic proximity-ligation to retrieve complete viral genomes (github.com) Instruction of reproducing resul…...

DNs服务学习笔记

DNS&#xff1a;域名系统&#xff08;英文&#xff1a;Domain Name System)是一个域名系统&#xff0c;是万维网上作为域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使用户更方便的访问互联网&#xff0c;而不用去记住能够被机器直接读取的IP数串。类似于生活中的11…...

获取线程池中任务执行数量

获取线程池中任务执行数量 通过线程池进行任务处理&#xff0c;有时我们需要知道线程池中任务的执行状态。通过ThreadPoolExecutor的相关API实时获取线程数量&#xff0c;排队任务数量&#xff0c;执行完成线程数量等信息。 实例 private static ExecutorService es new Thr…...

RK3566 Android 11平台上适配YT8512C 100M PHY

RK3566代码之前适配的1000M IC RTL8211F , 现在需要在之前的基础上修改PHY IC 为裕泰的YT8512C ----------------------------------------------------------------------//将1000M 的配置关掉&#xff0c;改为100M 配置,查看RK3566 资料关于以太网的配置即可知道如何修改 #if…...

docker 部署haproxy cpu占用特别高

在部署mysql 主主高可用时&#xff0c;使用haproxy进行负载&#xff0c;在服务部使用的情况下发现服务器cpu占比高&#xff0c;负载也高&#xff0c;因此急需解决这个问题。 1.解决前现状 1.1 部署配置文件 cat > haproxy.cfg << EOF globalmaxconn 4000nbthrea…...

Oracle导出CSV文件

利用spool spool基本格式&#xff1a; spool 路径文件名 select col1||,||col2||,||col3||,||col4 from tablename; spool off spool常用的设置&#xff1a; set colsep ;    //域输出分隔符 set echo off;    //显示start启动的脚本中的每个sql命令&#xff0c;缺…...

图像分割实战-系列教程12:deeplab系列算法概述

&#x1f341;&#x1f341;&#x1f341;图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 1、deeplab概述 图像分割中的传统做法&#xff1a;为了增大感受野&#xff0c;通常都会选择pooling…...

数据库02-07 存储

计算机存储系统&#xff1a; 02.磁道存储...

WPF 入门教程DispatcherTimer计时器

https://www.zhihu.com/tardis/bd/art/430630047?source_id1001 在 WinForms 中&#xff0c;有一个名为 Timer 的控件&#xff0c;它可以在给定的时间间隔内重复执行一个操作。WPF 也有这种可能性&#xff0c;但我们有DispatcherTimer控件&#xff0c;而不是不可见的控件。它几…...

【教学类-43-04】20231229 N宫格数独4.0(n=2,4,6,8) (ChatGPT AI对话大师生成 回溯算法)

作品展示&#xff1a; 背景需求&#xff1a; 幼儿表示自己适合做5宫格 第一次AI生成九宫格数独python代码 【教学类-43-03】20231229 N宫格数独3.0&#xff08;n1、2、3、4、6、8、9&#xff09; &#xff08;ChatGPT AI对话大师生成&#xff09;-CSDN博客文章浏览阅读162次&…...

WPF美化ItemsControl1:不同颜色间隔

首先我们有的是一个绑定好数据的ItemsControl <ItemsControl ItemsSource"{Binding Starts}"> </ItemsControl> 运行后呢是朴素的将数据竖着排列 如果想要数据之间有间距&#xff0c;可以使用数据模板&#xff0c;将数据放到TextBlock中显示&#xff0…...

查看进程对应的路径查看端口号对应的进程ubuntu 安装ssh共享WiFi设置MyBatis 使用map类型作为参数,复杂查询(导出数据)

Linux 查询当前进程所在的路径 top 命令查询相应的进程号pid ps -ef |grep 进程名 lsof -I:端口号 netstat -anp|grep 端口号 cd /proc/进程id cwd 进程运行目录 exe 执行程序的绝对路径 cmdline 程序运行时输入的命令行命令 environ 记录了进程运行时的环境变量 fd 目录下是进…...

医院信息系统集成平台—安全保障体系

​​​​​​隐私保护措施 隐私保护及信息安全是医院信息平台所要重点解决的问题,应从患者同意,匿名化服务,依据病种、角色等多维度授权,关键信息(字段级、记录级、文件级)加密存储等方面展开。电子病历等医疗数据进行调阅时,包括强身份认证需求、角色授权需求、责任认…...

【信息论与编码】习题-填空题

目录 填空题1.克劳夫特不等式是判断&#xff08; &#xff09;的充要条件。2.无失真信源编码的中心任务是编码后的信息率压缩接近到&#xff08;&#xff09;限失真压缩中心任务是在给定的失真度条件下&#xff0c;信息率压缩接近到&#xff08; &#xff09;。3.常用的检纠错方…...

从‘不好用的CE’到‘好用的OD’:一次逆向实战中的工具选择与思路转换

逆向工程实战&#xff1a;从工具局限到思维跃迁的破解之道 当那个MFC程序弹出第一个窗口时&#xff0c;我习惯性地打开了Cheat Engine——这个在游戏修改领域堪称神器的工具。但十分钟后&#xff0c;面对毫无进展的扫描结果和不断跳出的错误提示&#xff0c;我突然意识到&#…...

别再只懂RGB了!用PIL的getpixel()玩转图片九种模式,从像素值看图像本质

像素解码术&#xff1a;用PIL九种图像模式与getpixel()重构视觉认知 当你用getpixel()提取像素值时&#xff0c;是否曾被这些情况困扰过&#xff1a;明明是彩色图片却返回单个数字&#xff1f;处理PNG透明背景时得到四个值的元组&#xff1f;灰度图的像素值突然变成0或255&…...

黑莓印相≠复古滤镜!基于CIE Lab色域分析的Midjourney色彩空间偏移校准方案(附Python验证脚本)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;黑莓印相≠复古滤镜&#xff01;基于CIE Lab色域分析的Midjourney色彩空间偏移校准方案&#xff08;附Python验证脚本&#xff09; 黑莓印相&#xff08;Blackberry Print Tone&#xff09;常被误认为是…...

优化ESP32 ADF 音频问题

可以&#xff0c;现在已经进入音质调试阶段了&#xff0c;不是“能不能播放”的阶段。 你现在的问题大概率不是一个单点问题&#xff0c;而是下面几类之一&#xff1a; 1. 音量 / 增益太大&#xff0c;导致 ES8388 或 MD8002A 功放削顶失真 2. I2S 时钟不准&#xff0c;导致声音…...

4sapi 企业级实战:统一模型网关与全生命周期管理解决方案

引言随着大模型技术在企业中的广泛应用&#xff0c;越来越多的企业开始面临 "模型碎片化" 的挑战。不同部门、不同业务线各自对接不同的大模型厂商&#xff0c;使用不同的 API 接口&#xff0c;导致企业内部出现了多个独立的 AI 孤岛&#xff0c;带来了一系列严重的问…...

实战解析:用高斯过程回归搞定不确定性预测

1. 高斯过程回归能解决什么问题 我第一次接触高斯过程回归是在一个金融风控项目里。当时我们需要预测未来三个月的用户违约概率&#xff0c;但传统机器学习模型只能给出一个冰冷的数字预测&#xff0c;完全无法体现预测的可信程度。这就像天气预报只告诉你"明天会下雨&quo…...

联想刃7000k BIOS解锁终极指南:安全释放隐藏性能的3种方法

联想刃7000k BIOS解锁终极指南&#xff1a;安全释放隐藏性能的3种方法 【免费下载链接】Lenovo-7000k-Unlock-BIOS Lenovo联想刃7000k2021-3060版解锁BIOS隐藏选项并提升为Admin权限 项目地址: https://gitcode.com/gh_mirrors/le/Lenovo-7000k-Unlock-BIOS 对于联想刃7…...

QMC-Decoder深度解析:解锁QQ音乐加密音频的高效实战指南

QMC-Decoder深度解析&#xff1a;解锁QQ音乐加密音频的高效实战指南 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 在数字音乐版权保护日益严格的今天&#xff0c;你是否曾…...

从Java后端到AI风口:转型踩坑一年,我悟了!涨薪30%的真相是…

做了八年Java后端&#xff0c;去年咬牙转型AI应用开发。这一年踩过坑、加过班、也被面试官问倒过。但回头看&#xff0c;这条路选对了——薪资涨了30%&#xff0c;职业空间也打开了。我必须告诉那些还在犹豫要不要从后端跳出来的同行——现在的AI应用开发社招&#xff0c;确实是…...

【机器学习】Stacking模型融合:从原理到实战的进阶指南

1. 为什么需要Stacking模型融合&#xff1f; 当你用单一模型处理复杂数据时&#xff0c;经常会遇到这样的困境&#xff1a;线性回归对非线性关系束手无策&#xff0c;决策树容易过拟合&#xff0c;神经网络需要大量调参。我在去年参加Kaggle房价预测比赛时就深有体会——当时用…...