【力扣刷题】预测赢家

news2024/11/24 3:34:59

🔗 题目链接

题目描述

给你一个整数数组 nums 。玩家 1 和玩家 2 基于这个数组设计了一个游戏。

玩家 1 和玩家 2 轮流进行自己的回合,玩家 1 先手。开始时,两个玩家的初始分值都是 0 。每一回合,玩家从数组的任意一端取一个数字(即,nums[0]nums[nums.length - 1]),取到的数字将会从数组中移除(数组长度减 1 )。玩家选中的数字将会加到他的得分上。当数组中没有剩余数字可取时,游戏结束。

如果玩家 1 能成为赢家,返回 true 。如果两个玩家得分相等,同样认为玩家 1 是游戏的赢家,也返回 true你可以假设每个玩家的玩法都会使他的分数最大化

题目分析

题目有一句”你可以假设每个玩家的玩法都会使他的分数最大化“很关键,说明两个人都是绝对聪明的人,他们的想法都是一样的。

这道题我们发现数组 nums 是不断变化的,所以可以用动态规划的思路来做。

dp[i][j]表示的在[i, j]所组成的子数组,先手玩家比后手玩家多得的分数(正数则为多得,负数则为少得),动态规划方程可以表示为:

在这里插入图片描述

[i, j] 数组中,玩家 1 作为先手,有两种选择:

  • 选择nums[i],那么剩下的[i+1, j]则由玩家 2 作为先手来选择
    • [i+1, j]中,玩家 2 作为先手会比玩家 1 多得的分数是dp[i+1][j]
  • 选择nums[j],那么剩下的[i, j-1]则由玩家 2 作为先手来选择
    • [i, j-1]中,玩家 2 作为先手会比玩家 1 多得的分数是dp[i][j-1]

在这里插入图片描述

我们假设nums数组为[1, 5, 8, 3, 5, 2],则表示为:

nums012345
158352

那么,我们可以得到一个 6×6 的二维表格,只需要把表格上半部分填充完整即可。

dp[i][j]012345
01
1-5
2--8
3---3
4----5
5-----2

首先,我们填充j=1列,很容易发现,dp[0][1]的结果是 4。

dp[i][j]012345
014
15
28
33
45
52

接下来,我们填充j=2列:

dp[i][j]012345
01441
1530
285
33
45
52

接下来,我们填充j=3列:

dp[i][j]012345
01441
1530
285
33
45
52

接下来,我们填充j=4列:

dp[i][j]012345
014414
15305
2856
332
45
52

最后,,我们填充j=5列:

dp[i][j]012345
0144144
15305-3
28568
3320
453
52

最后,我们发现,玩家 1 是胜利的。

题解代码

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var PredictTheWinner = function (nums) {
  const len = nums.length;
  const dp = new Array(len);
  for (let i = 0; i < len; i++) {
    dp[i] = new Array(len);
    dp[i][i] = nums[i];
  }
  for (let j = 1; j < len; j++) {
    for (let i = j - 1; i >= 0; i--) {
      dp[i][j] = Math.max(nums[i] - dp[i + 1][j], nums[j] - dp[i][j - 1]);
    }
  }
  return dp[0][len - 1] >= 0;
};

运行结果

在这里插入图片描述

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

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

相关文章

leetcode热题HOT100汇总——持续更新中

文章目录前言1. 两数之和2. 两数相加3.无重复字符的最长子串4. 寻找两个正序数组的中位数5. 最长回文子串10. 正则表达式匹配11. 盛最多水的容器15. 三数之和17. 电话号码的字母组合19. 删除链表的倒数第 N 个结点20. 有效的括号21. 合并两个有序链表前言 为了学习本文捋顺lee…

再多学一点Spring之过滤器与拦截器的区别

学习和使用Spring这么久了&#xff0c;我们都用过过滤器和拦截器&#xff0c;但是真要被问到过滤器和拦截器有什么区别&#xff0c;我又一脸懵逼了&#xff0c;回答不上来。今天我们就来学习一下&#xff0c;过滤器和拦截器。 过滤器 通过实现javax.servlet.Filter接口来自定义…

网站被篡改 收录一些非本网站快照跳转如何解决

在实际的网站运营维护过程中&#xff0c;经常发生网站被HACK攻击等情况&#xff0c;尤其网站的标题被篡改为中文关键词<title>&#xff0c;使得网站在百度搜索的索引结果非常的明显&#xff0c;直接在浏览器里打开网站&#xff0c;用肉眼看到的是未被篡改的首页标题。根据…

计算机学徒等级划分

目录 第一级&#xff1a;菜鸟级 第二级&#xff1a;新手级 第三级&#xff1a;入门级 第四级&#xff1a;精通级 第五级&#xff1a;巅峰级 第一级&#xff1a;菜鸟级 概述&#xff1a;你问他计算机是干什么的&#xff1f;他说&#xff1a;“打游戏的&#xff0c;看电影的…

地下水监测系统的构成,优势是什么?

平升电子地下水监测系统由地下水自动监测站监测设备和监测中心平台软件组成。监测设备自动采集、存储地下水水位、水温、水量、水质数据&#xff0c;通过4G/NB-IoT/北斗无线通信网络定时上报至省/市/县级监测中心平台&#xff0c;平台自动接收和存储数据&#xff0c;并对地下水…

排查 Edge WebView2 在某个设备上不出图像的问题

我们在 Windows 应用内嵌入 Edge WebView2&#xff0c;来展示部分用网页实现的界面。总得来说还是不错的&#xff0c;比如&#xff1a; 渲染很快&#xff0c;基本上内置网页100毫秒以内控件样式很清爽&#xff0c;没有多余界面开发需要调用的 API 也不多 但是最近在某个用户那…

2022年山东最新建筑施工架子工(建筑特种作业)模拟题库及答案

百分百题库提供特种工&#xff08;架子工&#xff09;考试试题、特种工&#xff08;架子工&#xff09;考试预测题、特种工&#xff08;架子工&#xff09;考试真题、特种工&#xff08;架子工&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助…

21天学Python --- 打卡12:python执行jar包

21天学Python --- 打卡12:Python执行jar包1. Subprocess1.1 Method1.2 Execure Jar2. Jpype2.1 Install2.2 Execute Simple Jar2.2.1 Java Code2.2.2 Python Code2.3 Execute Maven Jar3. Awakening1. Subprocess subprocess 是 Python 2.4 中新增的一个模块 1.1 Method subpro…

第二证券|医药板块短期轮动加快 机构看好后市机会

作为现在商场行情继续性最强的职业板块&#xff0c;医药股昨日早盘呈现回调&#xff0c;午后继续反弹&#xff0c;体现出较强的承接动能。机构以为&#xff0c;本轮新冠医治概念主线行情或仍将延续&#xff0c;但个股或将继续分解。 在本轮反弹行情中&#xff0c;医药板块表现较…

postgres 源码解析 44 btree插入流程 btinsert

基于前两篇对btree的基础介绍&#xff0c;本文将从源码角度讲解btree的插入流程&#xff0c;相关至内容见&#xff1a; postgres源码解析41 btree索引文件的创建–1 postgres源码解析42 btree索引文件的创建–2 数据结构 /** BTStackData -- As we descend a tree, we push t…

干货 | 鸿翼&深信服之内容安全3大应用场景实践

随着企业数字化转型的推进&#xff0c;在企业内容管理层面&#xff0c;面临着数据爆发式增长&#xff0c;内容安全合规、海量非结构化数据分散存储&#xff0c;业务系统重建数据难以整合&#xff0c;无法统一管理等问题。 在数据安全层面&#xff0c;随着新威胁层出不穷&#…

Docker的CICD

&#x1f38f;⭕引言 回顾使用docker进行项目部署的步骤&#xff1a; 将项目通过maven进行编译打包将文件上传到指定的服务器中将war包放到tomcat的目录中通过Dockerfile将Tomcat和war包转成一个镜像&#xff0c;由DockerCompose的docker-compose.yml去运行容器 以上操作&#…

frp内网穿透详细安装步骤以及使用

frp是一款内网穿透工具&#xff0c;首先要一台服务器用作服务端&#xff08;Linux&#xff09;&#xff0c;将自己的(WIN10)电脑用作客户端&#xff0c;我将通俗的讲解详细的安装以及使用过程&#xff0c;废话不多直接开始。 Linux要开放 7000 7500 9600端口&#xff0c;一…

Android入门第48天-静态BroadCast之接受开机广播

简介 我们在之前的BroadCast章节中写了动态BroadCast。但我们提过一笔BroadCast也有静态之分&#xff0c;而静态的BroadCast主要用于监听一些如&#xff1a;开机广播、SIM卡拨出插入等广播。这些广播都为静态注册广播事件。因此我们今天就以一个App监听Android开机广播为例子说…

[附源码]Node.js计算机毕业设计高校科研项目申报管理信息系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

三次握手四次挥手和SSL/TLS握手

http(TCP)三次握手四次挥手&#xff1a; 三次握手&#xff1a; SYN&#xff1a;同步位。SYN1 表示进行一个连接请求。 ACK&#xff1a;确认位。ACK1 表示确认有效&#xff0c;ACK0 表示确认无效。 ack&#xff1a;确认号。等于对方发送的序号1。 seq&#xff1a;序号。 握手…

高通Ride软件开发包使用指南(6)

高通Ride软件开发包使用指南&#xff08;6&#xff09;6.2使用SDK设置配置QDrive平台6.3生成SDK配置文件6.4 QDrive功能验证6.2使用SDK设置配置QDrive平台 配置平台 $ cd ~/qride/platform $ ./setup.sh [Platform SOC] 该脚本根据IP地址检测平台&#xff0c;然后推送摄像头Q…

【信息奥赛题解】位数问题(详细题解 C++ 代码)

&#x1f4da; 位数问题 &#x1f680; 题目浏览 【题目名称】位数问题 【题目描述】 在所有的 NNN 位数中&#xff0c;有多少个数中有偶数个数字 333 ? 由于结果可能很大&#xff0c;你只需要输出这个答案对 123451234512345 取余的值。 【输入】 读入一个数 N(N≤1000…

【Redis】数据类型操作一 (key/String/List)

文章目录0、Redis键(key)1、Redis字符串(String)2、Redis列表(List)实操0、Redis键(key)1、Redis字符串(String)2、Redis列表(List)0、Redis键(key) 切换数据库 select dbid select 8 清空数据库 flushdb &#xff08;清空当前库&#xff09; flushall &#xff08;通杀全部库…

python机器学习与深度学习在气象中如何应用??如台风预报数据智能订正、预测风电场的风功率、预测浅水方程模式

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;在数据处理、科学计算、数学建模、数据挖掘和数据可视化方面具备优异的性能&#xff0c;这些优势使得Python在气象、海洋、地理、气候、水文和生态等地学领域的科研和工程项目中得到广泛应用。可以…