Skip to content

Commit 0f1e1ec

Browse files
committed
小米-最大连续子矩阵的和
1 parent d32034c commit 0f1e1ec

File tree

1 file changed

+44
-2
lines changed

1 file changed

+44
-2
lines changed

go-leetcode/interview_algorithm/xiaomi_20241122_max-submatrix-lcci/xiaomi_20241122_max-submatrix-lcci_test.go

+44-2
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,34 @@ package xiaomi_20241122_max_submatrix_lcci
22

33
import (
44
"fmt"
5+
"math"
56
"testing"
67
)
78

8-
// 小米二面
9+
// 小米二面(端到端数据闭环工程师)
10+
911
// 算法题1: 最大连续子数组的和(mid)
1012
// 0053.最大子数组和
1113
// https://leetcode.cn/problems/maximum-subarray
1214

13-
// 算法题2: 最大连续子矩阵的和(hard)
15+
// 算法题2: 最大连续子矩阵的和(hard)🌟
16+
// 面试题 17.24. 最大子矩阵
17+
// https://leetcode.cn/problems/max-submatrix-lcci
1418

1519
func TestMaxSubArraySum(t *testing.T) {
1620
nums := []int{-2, 1, -3, 4, -1, 2, 1, -5, 4}
1721
fmt.Println(maxSubArraySum(nums)) // 6
1822
}
1923

24+
func TestMaxSubMatrixSum(t *testing.T) {
25+
matrix := [][]int{
26+
{9, -8, 1, 3, -2},
27+
{-3, 7, 6, -2, 4},
28+
{6, -4, -4, 8, -7},
29+
}
30+
fmt.Println(maxSubMatrixSum(matrix)) // 19
31+
}
32+
2033
// maxSubArraySum 最大连续子数组的和
2134
func maxSubArraySum(nums []int) int {
2235
n := len(nums)
@@ -41,3 +54,32 @@ func maxSubArraySum(nums []int) int {
4154
}
4255
return ans
4356
}
57+
58+
// maxSubMatrixSum 最大连续子矩阵的和
59+
// 思路:动态规划+前缀和
60+
func maxSubMatrixSum(matrix [][]int) int {
61+
m := len(matrix)
62+
if m == 0 {
63+
return 0
64+
}
65+
n := len(matrix[0])
66+
var ans int
67+
for beginLine := 0; beginLine < m; beginLine++ {
68+
sum := make([]int, n)
69+
for i := beginLine; i < m; i++ {
70+
dp := math.MinInt32
71+
for j := 0; j < n; j++ {
72+
sum[j] += matrix[i][j]
73+
if dp > 0 {
74+
dp += sum[j]
75+
} else {
76+
dp = sum[j]
77+
}
78+
if dp > ans {
79+
ans = dp
80+
}
81+
}
82+
}
83+
}
84+
return ans
85+
}

0 commit comments

Comments
 (0)