[Leetcode][第486题][JAVA][预测赢家][动态规划][递归]
生活随笔
收集整理的這篇文章主要介紹了
[Leetcode][第486题][JAVA][预测赢家][动态规划][递归]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【問題描述】[中等]
【解答思路】
1.遞歸
復雜度
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)
【總結】
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][预测赢家][动态规划][递归]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 键盘流的逆袭- Idea 中使用 VIM
- 下一篇: php基础教程(三):变量