题目链接

https://leetcode-cn.com/problems/predict-the-winner/

题目说明

题解

主要方法:递推;动态规划;前缀和

解释说明:

  1. 求前缀和 pre_nums ,pre_nums[0] = 0, pre_nums[1+i] = sum(nums[0……i])

  2. 动态规划、递推:

    • 数据表示:设立二维数组dp,dp[i][j]表示区间 [i,j] 内先取者能取得的最大值。dpnums
    • 初始状态:遍历 nums 数组求得长度为 1 的区间 [i,i] 内的最大值,即 dp[i][i] = nums[i]
    • 动态方程:先后遍历长度l,起点i,dp[i][j] [i,j]内最大值 = pre_nums[j+1]-pre_nums[i] nums[i,j]的总和 - min(dp[i][j-1] 取尾端,则减去下一个人相应的最大值[i,j-1], dp[i+1][j]) 取首端,则减去下一个人相应的最大值[i+1,j]
  3. 数据输出:比较全部最大值与总和的一半 return dp[0][size-1] >= sum/2

代码示例:

class Solution:
def PredictTheWinner(self, nums: List[int]) -> bool:
size = len(nums)
# 求前缀和
pre_nums = [0]
for i in range(size):
pre_nums.append(pre_nums[-1]+nums[i])
dp, tmp = nums[:], []
# 动态规划,这里 dp 数组降维,重复使用
for l in range(2, size+1):
tmp.clear()
for i in range(size - l + 1):
tmp.append(pre_nums[i+l] - pre_nums[i] - min(dp[i], dp[i+1]))
dp = tmp[:]
return dp[0] >= pre_nums[-1]/2

每日一题 LeetCode 486. 预测赢家 【递推】【前缀和】【动态规划】的更多相关文章

  1. 每日一题-——LeetCode(486) 预测赢家

    题目描述: 给定一个表示分数的非负整数数组. 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端拿取分数,然后玩家1拿,…….每次一个玩家只能拿取一个分数,分数被拿取之后不再可取.直到 ...

  2. Java实现 LeetCode 486 预测赢家

    486. 预测赢家 给定一个表示分数的非负整数数组. 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端拿取分数,然后玩家1拿,--.每次一个玩家只能拿取一个分数,分数被拿取之后不再可 ...

  3. leetcode 486 预测赢家

    题目描述 给定一个表示分数的非负整数数组. 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端拿取分数,然后玩家1拿,--.每次一个玩家只能拿取一个分数,分数被拿取之后不再可取.直到没 ...

  4. Leetcode之动态规划(DP)专题-486. 预测赢家(Predict the Winner)

    Leetcode之动态规划(DP)专题-486. 预测赢家(Predict the Winner) 给定一个表示分数的非负整数数组. 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端 ...

  5. HYSBZ(BZOJ) 4300 绝世好题(位运算,递推)

    HYSBZ(BZOJ) 4300 绝世好题(位运算,递推) Description 给定一个长度为n的数列ai,求ai的子序列bi的最长长度,满足bi&bi-1!=0(2<=i<= ...

  6. 每日一题 LeetCode 491. 递增子序列 【递推】【递增子序列】【动态规划】

    题目链接 https://leetcode-cn.com/problems/increasing-subsequences/ 题目说明 题解 主要方法:递推:动态规划 解释说明: 数据表示:观察数据范 ...

  7. ACM学习历程—NPU 2015年陕西省程序设计竞赛网络预赛(正式赛)F题 和谐的比赛(递推)

    Description 今天西工大举办了一场比赛总共有m+n人,但是有m人比较懒没带电脑,另外的n个人带了电脑.不幸的是,今天机房的电脑全坏了只能用带的电脑,一台电脑最多两人公用,确保n>=m. ...

  8. luogu题解 P1707 【刷题比赛】矩阵加速递推

    题目链接: https://www.luogu.org/problemnew/show/P1707 分析: 洛谷的一道原创题,对于练习矩阵加速递推非常不错. 首先我们看一下递推式: \(a[k+2]= ...

  9. LeetCode 70 - 爬楼梯 - [递推+滚动优化]

    假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2输出: 2解释: 有两种方 ...

随机推荐

  1. Spring security OAuth2.0认证授权学习第三天(认证流程)

    本来之前打算把第三天写基于Session认证授权的,但是后来视屏看完后感觉意义不大,而且内容简单,就不单独写成文章了; 简单说一下吧,就是通过Servlet的SessionApi 通过实现拦截器的前置 ...

  2. IDEA创建新空项目

    IDEA创建新空项目 File -> New -> Project -> Empty Project -> 然后OK 这个是什么都不能做的,然后我们创建Module. File ...

  3. vue 通过css实现输入框居中输入

    今天开发时突然想写blog了,水一下(o゚v゚)ノ css代码 .inputStyle { text-align: center;/*主要就是这个,下面的都是样式*/ width: 6rem; hei ...

  4. [转载] 微软发布 SURFACE DUO ANDROID SDK 和模拟器

    模拟器截图 微软今天发布了双屏折叠设备 Surface Duo Android 开发工具(SDK 和模拟器),Windows 10X 开发工具和模拟器之后 2 月 11 日发布,并宣布了新的针对双屏体 ...

  5. pycharm之ctrl+鼠标滚轮调整字体大小

    按照图示设置,可以添加:ctrl+鼠标滚轮调整字体大小功能 1. 2.

  6. python中的算数运算符+、-、*、/、//、%、**

    例如a=5,b=2 +    两个对象相加                              a+b=7 -    两个对象相减                              a- ...

  7. 云计算openstack核心组件——horizon Web管理界面(10)

    一.horizon 介绍: 理解 horizon Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizone 所提供的 DashBoard 服务 ...

  8. maximo入门----用户使用提要

    其实七月初就知道自己要做maximo了,但是那个时候

  9. Oracle学习(十五)PLSQL安装

    PS:由于原来一直用的旧版本的PLSQL客户端,查看执行计划有些数据无法展示,所以今天换一波新版本的使用,记录下安装和使用流程. PLSQL(oracle数据可视化工具) 一.下载 我用的13的版本, ...

  10. 使用SpringBoot的方式配置过滤器

    springboot 不存在web.xml 那么如何配置过滤器呢 springboot提供了一种方式 通过spring容器配置 @Bean public FilterRegistrationBean ...