Skip to content

Commit a2da1d6

Browse files
authored
feat: add swift implementation to lcci problem: No.17.24 (doocs#2822)
1 parent 9055b4a commit a2da1d6

File tree

3 files changed

+126
-0
lines changed

3 files changed

+126
-0
lines changed

lcci/17.24.Max Submatrix/README.md

+43
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,49 @@ func getMaxMatrix(matrix [][]int) []int {
190190
}
191191
```
192192

193+
```swift
194+
class Solution {
195+
func getMaxMatrix(_ matrix: [[Int]]) -> [Int] {
196+
let m = matrix.count, n = matrix[0].count
197+
var s = Array(repeating: Array(repeating: 0, count: n), count: m + 1)
198+
199+
for i in 0..<m {
200+
for j in 0..<n {
201+
s[i + 1][j] = s[i][j] + matrix[i][j]
202+
}
203+
}
204+
205+
var mx = matrix[0][0]
206+
var ans = [0, 0, 0, 0]
207+
208+
for i1 in 0..<m {
209+
for i2 in i1..<m {
210+
var nums = [Int](repeating: 0, count: n)
211+
for j in 0..<n {
212+
nums[j] = s[i2 + 1][j] - s[i1][j]
213+
}
214+
215+
var start = 0
216+
var f = nums[0]
217+
for j in 1..<n {
218+
if f > 0 {
219+
f += nums[j]
220+
} else {
221+
f = nums[j]
222+
start = j
223+
}
224+
if f > mx {
225+
mx = f
226+
ans = [i1, start, i2, j]
227+
}
228+
}
229+
}
230+
}
231+
return ans
232+
}
233+
}
234+
```
235+
193236
<!-- tabs:end -->
194237

195238
<!-- end -->

lcci/17.24.Max Submatrix/README_EN.md

+43
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,49 @@ func getMaxMatrix(matrix [][]int) []int {
195195
}
196196
```
197197

198+
```swift
199+
class Solution {
200+
func getMaxMatrix(_ matrix: [[Int]]) -> [Int] {
201+
let m = matrix.count, n = matrix[0].count
202+
var s = Array(repeating: Array(repeating: 0, count: n), count: m + 1)
203+
204+
for i in 0..<m {
205+
for j in 0..<n {
206+
s[i + 1][j] = s[i][j] + matrix[i][j]
207+
}
208+
}
209+
210+
var mx = matrix[0][0]
211+
var ans = [0, 0, 0, 0]
212+
213+
for i1 in 0..<m {
214+
for i2 in i1..<m {
215+
var nums = [Int](repeating: 0, count: n)
216+
for j in 0..<n {
217+
nums[j] = s[i2 + 1][j] - s[i1][j]
218+
}
219+
220+
var start = 0
221+
var f = nums[0]
222+
for j in 1..<n {
223+
if f > 0 {
224+
f += nums[j]
225+
} else {
226+
f = nums[j]
227+
start = j
228+
}
229+
if f > mx {
230+
mx = f
231+
ans = [i1, start, i2, j]
232+
}
233+
}
234+
}
235+
}
236+
return ans
237+
}
238+
}
239+
```
240+
198241
<!-- tabs:end -->
199242

200243
<!-- end -->
+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class Solution {
2+
func getMaxMatrix(_ matrix: [[Int]]) -> [Int] {
3+
let m = matrix.count, n = matrix[0].count
4+
var s = Array(repeating: Array(repeating: 0, count: n), count: m + 1)
5+
6+
for i in 0..<m {
7+
for j in 0..<n {
8+
s[i + 1][j] = s[i][j] + matrix[i][j]
9+
}
10+
}
11+
12+
var mx = matrix[0][0]
13+
var ans = [0, 0, 0, 0]
14+
15+
for i1 in 0..<m {
16+
for i2 in i1..<m {
17+
var nums = [Int](repeating: 0, count: n)
18+
for j in 0..<n {
19+
nums[j] = s[i2 + 1][j] - s[i1][j]
20+
}
21+
22+
var start = 0
23+
var f = nums[0]
24+
for j in 1..<n {
25+
if f > 0 {
26+
f += nums[j]
27+
} else {
28+
f = nums[j]
29+
start = j
30+
}
31+
if f > mx {
32+
mx = f
33+
ans = [i1, start, i2, j]
34+
}
35+
}
36+
}
37+
}
38+
return ans
39+
}
40+
}

0 commit comments

Comments
 (0)