[Leetcode][第486题][JAVA][预测赢家][动态规划][递归]
【问题描述】[中等]
【解答思路】
1.递归
复杂度
class Solution {public boolean PredictTheWinner(int[] nums) {return total(nums,0,nums.length-1,1) >=0;}//turn 标记轮到谁了 正数表示先手 负数表示后手 public int total( int[]nums ,int start,int end,int turn){if(start == end){return nums[start]*turn;}int scoreStart = nums[start]*turn +total(nums,start+1,end,-turn);int scoreEnd = nums[end] *turn +total(nums,start ,end-1,-turn);//先选绝对值最大的那个分数,再把它转换成先后手选手对应的正分或负分// return Math.max(scoreStart * turn, scoreEnd * turn) * turn;if(turn == 1){return Math.max(scoreStart,scoreEnd);}else{return Math.min(scoreStart,scoreEnd);}}
}
2. 动态规划
方法一使用递归,存在大量重复计算,因此时间复杂度很高。由于存在重复子问题,因此可以使用动态规划降低时间复杂度。
第 1 步:设计状态
定义二维数组dp,其行数和列数都等于数组的长度,dp[i][j] 表示当数组剩下的部分为下标 i 到下标 j 时,当前玩家与另一个玩家的分数之差的最大值,注意当前玩家不一定是先手。
第 2 步:状态转移方程
第 3 步:考虑初始化
第 4 步:考虑输出
dp[0][length]
第 5 步:考虑是否可以状态压缩
是
时间复杂度:O(N2) 空间复杂度:O(N2)
class Solution {public boolean PredictTheWinner(int[] nums) {int length = nums.length;int[][] dp = new int[length][length];for (int i = 0; i < length; i++) {dp[i][i] = nums[i];}for (int i = length - 2; i >= 0; i--) {for (int j = i + 1; j < length; j++) {dp[i][j] = Math.max(nums[i] - dp[i + 1][j], nums[j] - dp[i][j - 1]);}}return dp[0][length - 1] >= 0;}
}
时间复杂度:O(N2) 空间复杂度:O(N)
class Solution {public boolean PredictTheWinner(int[] nums) {int length = nums.length;int[] dp = new int[length];for (int i = 0; i < length; i++) {dp[i] = nums[i];}for (int i = length - 2; i >= 0; i--) {for (int j = i + 1; j < length; j++) {dp[j] = Math.max(nums[i] - dp[j], nums[j] - dp[j - 1]);}}return dp[length - 1] >= 0;}
}
【总结】
1. 动态规划流程
第 1 步:设计状态
第 2 步:状态转移方程
第 3 步:考虑初始化
第 4 步:考虑输出
第 5 步:考虑是否可以状态压缩
2.递归 自上而下 动态规划 自底向上
3.算法思想
【数据结构与算法】【算法思想】动态规划
转载链接:https://leetcode-cn.com/problems/predict-the-winner/solution/yu-ce-ying-jia-by-leetcode-solution/
[Leetcode][第486题][JAVA][预测赢家][动态规划][递归]相关推荐
- [Leetcode][第104题][JAVA][二叉树的最大深度][递归][BFS]
[问题描述][简单] [解答思路] 1. 递归 终止条件/基本情况 root ==null 递推关系 max(l,r)+1 时间复杂度:O(N) 空间复杂度:O(height) class Solut ...
- [Leetcode][第546题][JAVA][移除盒子][递归][动态规划]
[问题描述][困难] [解答思路] 1. 递归 动态规划 class Solution {public int removeBoxes(int[] boxes) {int[][][] dp = new ...
- [Leetcode][第392题][JAVA][判断子序列][动态规划][双指针]
[问题描述][简单] [解答思路] 1. 双指针 时间复杂度:O(N+M) 空间复杂度:O(1) class Solution {public:bool isSubsequence(string s, ...
- [Leetcode][第312题][JAVA][戳气球][动态规划][记忆化搜索]
[问题描述][困难] [解答思路] 1. 记忆化搜索 时间复杂度:O(n^3) 空间复杂度:O(n^2) class Solution {public int[][] rec;public int[] ...
- [剑指offer]面试题第[49]题[Leetcode][第264题][JAVA][丑数][动态规划][堆]
[问题描述][中等] [解答思路] 1. 动态规划 时间复杂度:O(N) 空间复杂度:O(N) class Solution {public int nthUglyNumber(int n) {int ...
- [Leetcode][第111题][JAVA][BFS][二叉树的最小深度][BFS][递归]
[问题描述][简单] [解答思路] 1. 递归 自下而上 基本情况/结束条件 : 叶子节点的定义是左孩子和右孩子都为 null 时叫做叶子节点 当 root 节点左右孩子都为空时,返回 1 当 roo ...
- [Leetcode][第889题][JAVA][根据前序和后序遍历构造二叉树][分治][递归]
[问题描述][中等] [解答思路] copyOfRange class Solution {public TreeNode constructFromPrePost(int[] pre, int[] ...
- [Leetcode][第106题][JAVA][ 从中序与后序遍历序列构造二叉树][分治][递归]
[问题描述][中等] [解答思路] public class Solution {public TreeNode buildTree(int[] inorder, int[] postorder) { ...
- [Leetcode][第78题][JAVA][子集][位运算][回溯]
[问题描述][中等] [解答思路] 1. 位运算 复杂度 class Solution {List<Integer> t = new ArrayList<Integer>(); ...
最新文章
- 一文看懂计算机视觉-CV(基本原理+2大挑战+8大任务+4个应用)
- OpenAI雄心勃勃的机器人计划失败了:强化学习没法用?
- 从docker 中抓取jvm heap 信息, 并且分析
- VTK:环境球AmbientSpheres用法实战
- java复合赋值运算符_Java 之复合赋值运算符
- mongoose换成mysql_如何将MongoDB数据库的数据迁移到MySQL数据库中
- 动态规划在求解全源最短路径中的应用(JAVA)--Floyd算法
- 德不配位,势必遭殃!人事斗争,劝你不要参与!
- java迭代器输入的结果_Java学习之Iterator(迭代器)的一般用法 (转)
- 微软3月补丁星期二修复71个漏洞,其中3个是0day
- 栈与队列篇:347. 前 K 个高频元素(难度 中等)
- SUN SPARC T4-4电源故障引起的宕机
- python中del的用法
- [全新大碟]周杰倫 - 魔杰座
- 时下流行的css3页面纵向滑动效果
- 在线直播: 在 gTech 工作是一番怎样的体验?
- oppop+r1c怎么设置语言中文,OPPO R1C怎么样 OPPO R1C手机评测 (全文)
- 003Visual Basic装饰模式
- Linux安装GIT最新版
- 我是如何准备秋招互联网大厂后端学习的?
热门文章
- 2.3线性表的链式存储和运算—单链表应用举例
- ASP.NET学习笔记之操作过滤器
- 在Matlab2006a中如何创建.net组件
- erp系统服务器都是维护些什么意思,erp系统维护服务器维护管理文档.doc
- php array第一张图片_PHP array_udiff() 函数
- Android 自定义带图标Toast,工具方法,Toast自定义显示时间
- 小程序 mpvue 使用canvas绘制环形图表
- 4 微信公众号开发 被动回复消息 回复没有反应怎么办
- TFS2010映射工作区问题 路径 XXX 已在工作区 XXX;XXX 中映射
- spring security 认证与权限控制