File tree 3 files changed +93
-0
lines changed
lcci/17.23.Max Black Square
3 files changed +93
-0
lines changed Original file line number Diff line number Diff line change @@ -225,6 +225,38 @@ function findSquare(matrix: number[][]): number[] {
225
225
}
226
226
```
227
227
228
+ ``` swift
229
+ class Solution {
230
+ func findSquare (_ matrix : [[Int ]]) -> [Int ] {
231
+ let n = matrix.count
232
+ var down = Array (repeating : Array (repeating : 0 , count : n), count : n)
233
+ var right = Array (repeating : Array (repeating : 0 , count : n), count : n)
234
+
235
+ for i in stride (from : n - 1 , through : 0 , by : -1 ) {
236
+ for j in stride (from : n - 1 , through : 0 , by : -1 ) {
237
+ if matrix[i][j] == 0 {
238
+ down[i][j] = (i + 1 < n) ? down[i + 1 ][j] + 1 : 1
239
+ right[i][j] = (j + 1 < n) ? right[i][j + 1 ] + 1 : 1
240
+ }
241
+ }
242
+ }
243
+
244
+ for k in stride (from : n, through : 1 , by : -1 ) {
245
+ for i in 0 ... (n - k) {
246
+ for j in 0 ... (n - k) {
247
+ if down[i][j] >= k && right[i][j] >= k &&
248
+ right[i + k - 1 ][j] >= k && down[i][j + k - 1 ] >= k {
249
+ return [i, j, k]
250
+ }
251
+ }
252
+ }
253
+ }
254
+
255
+ return []
256
+ }
257
+ }
258
+ ```
259
+
228
260
<!-- tabs: end -->
229
261
230
262
<!-- end -->
Original file line number Diff line number Diff line change @@ -211,6 +211,38 @@ function findSquare(matrix: number[][]): number[] {
211
211
}
212
212
```
213
213
214
+ ``` swift
215
+ class Solution {
216
+ func findSquare (_ matrix : [[Int ]]) -> [Int ] {
217
+ let n = matrix.count
218
+ var down = Array (repeating : Array (repeating : 0 , count : n), count : n)
219
+ var right = Array (repeating : Array (repeating : 0 , count : n), count : n)
220
+
221
+ for i in stride (from : n - 1 , through : 0 , by : -1 ) {
222
+ for j in stride (from : n - 1 , through : 0 , by : -1 ) {
223
+ if matrix[i][j] == 0 {
224
+ down[i][j] = (i + 1 < n) ? down[i + 1 ][j] + 1 : 1
225
+ right[i][j] = (j + 1 < n) ? right[i][j + 1 ] + 1 : 1
226
+ }
227
+ }
228
+ }
229
+
230
+ for k in stride (from : n, through : 1 , by : -1 ) {
231
+ for i in 0 ... (n - k) {
232
+ for j in 0 ... (n - k) {
233
+ if down[i][j] >= k && right[i][j] >= k &&
234
+ right[i + k - 1 ][j] >= k && down[i][j + k - 1 ] >= k {
235
+ return [i, j, k]
236
+ }
237
+ }
238
+ }
239
+ }
240
+
241
+ return []
242
+ }
243
+ }
244
+ ```
245
+
214
246
<!-- tabs: end -->
215
247
216
248
<!-- end -->
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ func findSquare( _ matrix: [ [ Int ] ] ) -> [ Int ] {
3
+ let n = matrix. count
4
+ var down = Array ( repeating: Array ( repeating: 0 , count: n) , count: n)
5
+ var right = Array ( repeating: Array ( repeating: 0 , count: n) , count: n)
6
+
7
+ for i in stride ( from: n - 1 , through: 0 , by: - 1 ) {
8
+ for j in stride ( from: n - 1 , through: 0 , by: - 1 ) {
9
+ if matrix [ i] [ j] == 0 {
10
+ down [ i] [ j] = ( i + 1 < n) ? down [ i + 1 ] [ j] + 1 : 1
11
+ right [ i] [ j] = ( j + 1 < n) ? right [ i] [ j + 1 ] + 1 : 1
12
+ }
13
+ }
14
+ }
15
+
16
+ for k in stride ( from: n, through: 1 , by: - 1 ) {
17
+ for i in 0 ... ( n - k) {
18
+ for j in 0 ... ( n - k) {
19
+ if down [ i] [ j] >= k && right [ i] [ j] >= k &&
20
+ right [ i + k - 1 ] [ j] >= k && down [ i] [ j + k - 1 ] >= k {
21
+ return [ i, j, k]
22
+ }
23
+ }
24
+ }
25
+ }
26
+
27
+ return [ ]
28
+ }
29
+ }
You can’t perform that action at this time.
0 commit comments