题目地址:
https://leetcode.com/problems/grid-game/
给定一个 2 × n 2\times n 2×n的矩阵 A A A, ∀ i , j , A [ i ] [ j ] ≥ 1 \forall i, j, A[i][j]\ge 1 ∀i,j,A[i][j]≥1,甲从 ( 0 , 0 ) (0,0) (0,0)出发,每一步只能向右或者向下走一格,每次走到的位置都会将当前数字抹去(即变为 0 0 0),并且走到 ( 1 , n − 1 ) (1, n-1) (1,n−1)为止。甲先走,然后乙以相同的规则再走。甲想让乙走的路径和尽可能小。问乙能走的最大的路径和是多少。
乙能得到的最大分数是: min { max i { ∑ A [ 0 ] [ i : n − 1 ] , ∑ A [ 1 ] [ 0 : i − 2 ] } } \min\{\max_i\{\sum A[0][i:n-1], \sum A[1][0:i-2]\}\} min{imax{∑A[0][i:n−1],∑A[1][0:i−2]}}枚举即可。代码如下:
public class Solution {
public long gridGame(int[][] grid) {
long sum1 = 0, sum2 = 0;
for (int i = 1; i < grid[0].length; i++) {
sum1 += grid[0][i];
}
long res = sum1;
for (int i = 1; i < grid[0].length; i++) {
sum1 -= grid[0][i];
sum2 += grid[1][i - 1];
res = Math.min(res, Math.max(sum1, sum2));
}
return res;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。