TGViewer
Swift | LeetCode Swift | LeetCode @easy_swift_task · 1.3K subscribers
Post #1444 96
Задача: 827. Making A Large Island
Сложность: hard

Вам дан n x n бинарный матрица grid. Вам разрешено изменить не более одного 0 на 1.

Верните размер самого большого острова в grid после выполнения этой операции.

Остров — это группа 1, соединенных в 4 направлениях.

Пример:
Input: grid = [[1,1],[1,0]]
Output: 4
Explanation: Change the 0 to 1 and make the island bigger, only one island with area = 4.


👨‍💻 Алгоритм:

1⃣Пройдите по матрице и пометьте каждую группу, используя уникальный индекс, и запомните её размер.

2⃣Для каждого 0 в матрице проверьте соседние группы и вычислите потенциальный размер острова, если изменить этот 0 на 1.

3⃣Возвращайте максимальный размер острова, учитывая как уже существующие острова, так и потенциальные, образованные после изменения 0 на 1.

😎 Решение:
class Solution {
var dr = [-1, 0, 1, 0]
var dc = [0, -1, 0, 1]
var grid = [[Int]]()
var N = 0

func largestIsland(_ grid: [[Int]]) -> Int {
self.grid = grid
N = grid.count

var index = 2
var area = [Int](repeating: 0, count: N * N + 2)
for r in 0..<N {
for c in 0..<N {
if grid[r][c] == 1 {
area[index] = dfs(r, c, index)
index += 1
}
}
}

var ans = 0
for x in area { ans = max(ans, x) }

for r in 0..<N {
for c in 0..<N {
if grid[r][c] == 0 {
var seen = Set<Int>()
for move in neighbors(r, c) {
if grid[move / N][move % N] > 1 {
seen.insert(grid[move / N][move % N])
}
}
var bns = 1
for i in seen { bns += area[i] }
ans = max(ans, bns)
}
}
}

return ans
}

func dfs(_ r: Int, _ c: Int, _ index: Int) -> Int {
var ans = 1
grid[r][c] = index
for move in neighbors(r, c) {
if grid[move / N][move % N] == 1 {
grid[move / N][move % N] = index
ans += dfs(move / N, move % N, index)
}
}
return ans
}

func neighbors(_ r: Int, _ c: Int) -> [Int] {
var ans = [Int]()
for k in 0..<4 {
let nr = r + dr[k]
let nc = c + dc[k]
if nr >= 0 && nr < N && nc >= 0 && nc < N {
ans.append(nr * N + nc)
}
}
return ans
}
}


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_swift_task
  1. Oct 7, 2026🔥 Скрытые вакансии с удаленной работой для iOS разработчика, которые нигде больше не публ…
  2. Oct 4, 2026Задача: 523. Continuous Subarray Sum Сложность: medium Дан целочисленный массив nums и цел…
  3. Oct 4, 2026Задача: 1329. Sort the Matrix Diagonally Сложность: medium Диагональ матрицы — это диагона…
  4. Oct 3, 2026Задача: 200. Number of Islands Сложность: medium Дана двумерная бинарная сетка размером m…
  5. Oct 2, 2026Задача: 246. Strobogrammatic Number Сложность: easy Дана строка num, представляющая собой…
  6. Sep 29, 2026Задача: 644. Maximum Average Subarray II Сложность: hard Вам дан целочисленный массив nums…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →