-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path0486.预测赢家.java
84 lines (78 loc) · 2.72 KB
/
0486.预测赢家.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import java.util.Arrays;
/*
* @lc app=leetcode.cn id=486 lang=java
*
* [486] 预测赢家
*
* https://leetcode.cn/problems/predict-the-winner/description/
*
* algorithms
* Medium (59.26%)
* Likes: 581
* Dislikes: 0
* Total Accepted: 61K
* Total Submissions: 102.8K
* Testcase Example: '[1,5,2]'
*
* 给你一个整数数组 nums 。玩家 1 和玩家 2 基于这个数组设计了一个游戏。
*
* 玩家 1 和玩家 2 轮流进行自己的回合,玩家 1 先手。开始时,两个玩家的初始分值都是 0
* 。每一回合,玩家从数组的任意一端取一个数字(即,nums[0] 或 nums[nums.length - 1]),取到的数字将会从数组中移除(数组长度减
* 1 )。玩家选中的数字将会加到他的得分上。当数组中没有剩余数字可取时,游戏结束。
*
* 如果玩家 1 能成为赢家,返回 true 。如果两个玩家得分相等,同样认为玩家 1 是游戏的赢家,也返回 true
* 。你可以假设每个玩家的玩法都会使他的分数最大化。
*
*
*
* 示例 1:
*
*
* 输入:nums = [1,5,2]
* 输出:false
* 解释:一开始,玩家 1 可以从 1 和 2 中进行选择。
* 如果他选择 2(或者 1 ),那么玩家 2 可以从 1(或者 2 )和 5 中进行选择。如果玩家 2 选择了 5 ,那么玩家 1 则只剩下 1(或者 2
* )可选。
* 所以,玩家 1 的最终分数为 1 + 2 = 3,而玩家 2 为 5 。
* 因此,玩家 1 永远不会成为赢家,返回 false 。
*
* 示例 2:
*
*
* 输入:nums = [1,5,233,7]
* 输出:true
* 解释:玩家 1 一开始选择 1 。然后玩家 2 必须从 5 和 7 中进行选择。无论玩家 2 选择了哪个,玩家 1 都可以选择 233 。
* 最终,玩家 1(234 分)比玩家 2(12 分)获得更多的分数,所以返回 true,表示玩家 1 可以成为赢家。
*
*
*
* 提示:
*
*
* 1 <= nums.length <= 20
* 0 <= nums[i] <= 10^7
*
*
*/
// @lc code=start
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;
int[] dp = Arrays.copyOf(nums, length);
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;
}
}
// @lc code=end