weekly contest 430。

題目

輸入 m x n 的非負整數矩陣。

每次操作,你可以將任意 grid[i][j] 的值加 1。

求使得每直行嚴格遞增所需的最少操作次數。

解法

按照題意模擬。
只要沒比前一個數 pre 大,就改成 pre + 1。

時間複雜度 O(MN)。
空間複雜度 O(1)。

class Solution:
    def minimumOperations(self, grid: List[List[int]]) -> int:
        M, N = len(grid), len(grid[0])
        ans = 0
        for c in range(N):
            pre = -inf
            for r in range(M):
                x = grid[r][c]
                if x > pre:
                    pre = x
                else:
                    pre += 1
                    ans += pre - x

        return ans

反正 grid[r][c] = x 的新值不是 x 就是 pre + 1。
直接兩者取最大值也可以。

class Solution:
    def minimumOperations(self, grid: List[List[int]]) -> int:
        M, N = len(grid), len(grid[0])
        ans = 0
        for c in range(N):
            pre = -inf
            for r in range(M):
                x = grid[r][c]
                pre = max(pre+1, x)
                ans += pre - x

        return ans