每日一题 LeetCode 486. 预测赢家 【递推】【前缀和】【动态规划】
2024-10-09 16:46:42
题目链接
https://leetcode-cn.com/problems/predict-the-winner/
题目说明
题解
主要方法:递推;动态规划;前缀和
解释说明:
求前缀和 pre_nums ,pre_nums[0] = 0, pre_nums[1+i] = sum(nums[0……i])
动态规划、递推:
- 数据表示:设立二维数组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];
数据输出:比较全部最大值与总和的一半 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
最新文章
- HTML5 sessionStorage会话存储
- Win32 OpenProcess打开进程失败,返回5无权限操作
- 整理CSS引发的相关理论的梳理
- Smallest Rectangle Enclosing Black Pixels
- mysql数据库优化小结
- C++多重继承子类和父类指针转换过程中的一个易错点
- hive函数 -- split 字符串分割函数
- [转] linux中巧用ctrl-z后台运行程序
- android Init 相关分析
- mysql 复杂的查询语句,工作中用到的记录下
- JavaScript 核心参考教程 内置对象
- getaccesstoken方法
- Android应用性能优化方案
- mybatis-databaseIdProvider多数据库支持
- 最长公共子序列(POJ1458)
- VS 编码规范---- 代码注释设置
- Java开发笔记(五十四)内部类和嵌套类
- 【Core内存】.NET Core 2.0中使用MemoryCache
- EXPERT FOR SQL SERVER诊断系列--索引
- 4、搭建Python环境
热门文章
- Educational Codeforces Round 68 (Rated for Div. 2)-D. 1-2-K Game
- Dungeon Master(三维bfs)
- Math Problem(数学)
- JVM—01
- IE9 报错 script1004缺少“;”
- Mockito在JUnit测试中的使用
- Eclipse获取工作空间跟运行空间
- 干Java这一行,应该怎样提升自己?
- pytest封神之路第二步 132个命令行参数用法
- 我是如何使用freemarker生成Word文件的?