当前位置:网站首页>Leetcode solution - number of islands
Leetcode solution - number of islands
2022-07-05 07:34:00 【Front end watermelon brother_】
Hello everyone , I'm brother watermelon , Today we will do a classic algorithm problem —— Number of Islands .

LeetCode The corresponding title on is 200 topic :https://leetcode-cn.com/problems/number-of-islands/
This problem belongs to the island problem , There is a fixed routine , That's it Flood fill Algorithm .
Flood fill Algorithm
Flood fill Algorithm is a special algorithm , It's in an area , Spread outward from a certain point and find all the points connected with it , Finally get a block .
The process of covering the whole area from one point , Because it is much like the process of flooding an island , So it was named Flood fill, Literal translation “ Flood filling ”.
The obtained area is often used to fill with new colors . Paint bucket of drawing tool 、 Magic wand tools , It's really just through Flood fill algorithmic .
Implementation is usually DFS ( Depth-first traversal ) or BFS( Breadth first traversal ).
Ideas and Implementation
Let's see how to use Flood fill Algorithm to solve this problem .
First we traverse grid Two dimensional array , When the array element is found to be ‘1’, On behalf of us, we visited part of the island , let me put it another way , We found an island , Counter count Add one .
then , We flooded the island , In doing so, all parts of the island are marked “ Visited ”. You can also use an extra size and grid Same visited Array to mark , But it is not necessary to , Unless it is not allowed to modify the original array .
After submergence , We continue to traverse from the original place , Until the end .

DFS The specific code of is implemented as :
function numIslands(grid: string[][]): number {
const m = grid.length;
const n = grid[0].length;
let count = 0;
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (grid[i][j] === '1') {
// Discover part of the island
count++;
floodFill(grid, i, j);
}
}
}
return count;
};
function floodFill(grid: string[][], i: number, j: number) {
const m = grid.length; // common m That's ok
const n = grid[0].length; // common n Column
if (i < 0 || i >= m || j < 0 || j >= n) return; // Ran out of the map
if (grid[i][j] === '0') return; // Reached the edge of the island
grid[i][j] = '0'; // Flood
floodFill(grid, i - 1, j);
floodFill(grid, i + 1, j);
floodFill(grid, i, j - 1);
floodFill(grid, i, j + 1);
}
DFS There is a fatal problem : When the two-dimensional array is large , There is a risk of stack overflow .
So we might as well implement a BFS Solution method :
function numIslands(grid: string[][]): number {
const m = grid.length;
const n = grid[0].length;
let count = 0;
for (let i = 0; i < m; i++) {
for (let j = 0; j < n; j++) {
if (grid[i][j] === '1') {
// Discover part of the island
count++;
floodFill(grid, i, j);
}
}
}
return count;
};
function floodFill(grid: string[][], i: number, j: number) {
grid[i][j] = '0';
const queue: number[][] = [[i, j]];
while (queue.length) {
const size = queue.length;
for (let k = 0; k < size; k++) {
const [i, j] = queue.shift();
fillIfInArea(grid, i - 1, j, queue);
fillIfInArea(grid, i + 1, j, queue);
fillIfInArea(grid, i, j - 1, queue);
fillIfInArea(grid, i, j + 1, queue);
}
}
}
function fillIfInArea(grid: string[][], i: number, j: number, queue: number[][]) {
if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length) return;
if (grid[i][j] === '0') return;
grid[i][j] = '0';
queue.push([i, j]);
}
because JavaScript Native does not provide queues , I'm trying to save trouble , Directly use dynamic array to realize queue , The efficiency of leaving the team is very poor .
Use linked list to implement queue , The performance will be better . If you are interested in implementing a double linked list first , Then implement the queue .
ending
During the interview, I saw the algorithm problems related to the island , Be sure to remember what this article introduces “ Submerged by water , At a loss ” Of Flood fill Algorithm .
边栏推荐
- D2L installation
- [idea] common shortcut keys
- What does soda ash do?
- Don't confuse the use difference between series / and / *
- [neo4j] common operations of neo4j cypher and py2neo
- Unforgettable summary of 2021
- 行测--资料分析--fb--高照老师
- 公安专业知识--哔哩桐老师
- CADD课程学习(6)-- 获得已有的虚拟化合物库(Drugbank、ZINC)
- Light up the running light, rough notes for beginners (1)
猜你喜欢

How to modify the file path of Jupiter notebook under miniconda

2022年PMP项目管理考试敏捷知识点(7)

What if the DataGrid cannot see the table after connecting to the database
![[idea] efficient plug-in save actions to improve your work efficiency](/img/6e/49037333964865d9900ddf5698f7e6.jpg)
[idea] efficient plug-in save actions to improve your work efficiency

【idea】Could not autowire. No beans of xxx type found

并查集理论讲解和代码实现

Don't confuse the use difference between series / and / *

Anaconda navigator click open no response, can not start error prompt attributeerror: 'STR' object has no attribute 'get‘

Pytorch has been installed in anaconda, and pycharm normally runs code, but vs code displays no module named 'torch‘

行测--资料分析--fb--高照老师
随机推荐
The SQL implementation has multiple records with the same ID, and the latest one is taken
大学生活的自我总结-大一
Microservice registry Nacos introduction
With the help of Navicat for MySQL software, the data of a database table in different or the same database link is copied to another database table
Cookie operation
I 用c I 实现队列
Graduation thesis project local deployment practice
行测--资料分析--fb--高照老师
String alignment method, self use, synthesis, newrlcjust
Thunderbird tutorial \ easy to use mail client
[vscode] search using regular expressions
2022.06.27_ One question per day
ImportError: No module named ‘Tkinter‘
Oracle code use
I 用c l 栈与队列的相互实现
Anaconda navigator click open no response, can not start error prompt attributeerror: 'STR' object has no attribute 'get‘
Jenkins reported an error. Illegal character: '\ufeff'. Class, interface or enum are required
selenium 元素定位
Rough notes of C language (2) -- constants
Intelligent target detection 59 -- detailed explanation of pytoch focal loss and its implementation in yolov4