File tree Expand file tree Collapse file tree 3 files changed +93
-0
lines changed
lcci/17.23.Max Black Square Expand file tree Collapse file tree 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[] {
225225}
226226```
227227
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+
228260<!-- tabs: end -->
229261
230262<!-- end -->
Original file line number Diff line number Diff line change @@ -211,6 +211,38 @@ function findSquare(matrix: number[][]): number[] {
211211}
212212```
213213
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+
214246<!-- tabs: end -->
215247
216248<!-- 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