📅  最后修改于: 2023-12-03 15:36:03.759000             🧑  作者: Mango
给定一个二维数组,找出一个子矩阵使得其元素和最大,并返回最大值。
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
n = len(nums)
if n == 0:
return 0
if n == 1:
return nums[0]
cur_sum = max_sum = nums[0]
for i in range(1, n):
cur_sum = max(nums[i], cur_sum + nums[i])
max_sum = max(max_sum, cur_sum)
return max_sum
def maxSumSubmatrix(self, matrix: List[List[int]]) -> int:
if not matrix:
return 0
m, n = len(matrix), len(matrix[0])
res = -float('inf')
for i in range(m):
total = [0] * n
# 将当前列到第j列所有行的元素按列累加,变成一个1D数组
for j in range(i, m):
for k in range(n):
total[k] += matrix[j][k]
# 对当前1D数组进行最大子段和处理
cur_sum, max_sum = 0, -float('inf')
for t in range(n):
cur_sum = max(total[t], cur_sum + total[t])
max_sum = max(cur_sum, max_sum)
res = max(res, max_sum)
return res
整个算法的时间复杂度为:O(m²n),其中m和n分别表示二维矩阵的行和列。