Leetcode 200: number of islands (2023)

7 minutes of reading

Forward

I'll start posting about the leetcode issues I've created. I want to explain my thought process. Most of the time I find these problems have a key trick that I think is important and very easy to follow later.

Leetcode 200: number of islands

Let's start with the problem: Danym x n2D-Binärgitternetworkshowing the map„1”with (end) i„0”s (water), backnumber of islands.

AIslandit is surrounded by water and is formed by the horizontal or vertical connection of adjacent lands. You can assume that all four edges of the mesh are surrounded by water.

Example 1:

Entry:Grid = [["1","1","1","1","0"], ["1","1","0","1","0"], ["1 ","1","0","0","0"], ["0","0","0","0","0"]]Exit:1

Example 2:

Entry:Grid = [["1","1","0","0","0"], ["1","1","0","0","0"], ["0 ","0","1","0","0"], ["0","0","0","1","1"]]Exit:3

Limitations:

  • m == mesh length
  • n == Grid[i].Long
  • 1 <= m, n <= 300
  • Grid[i][j]Is„0”Lub„1”.

Trial

The first thing you should note is that this is a graphics issue. Why? Well, we have onem x mmesh and we need to find a pattern in it. How we find thingsGenerallyin graphics? We have two search algorithms: breadth-first search (BFS) and depth-first search (DFS). Whatever we use will work. I'll start with BFS.

But all we can do now is find things, so how do we fix the problem? This is where the trick comes in. When we come across an island, we can select it by flipping the entire island„1”s do„0”S. With both search algorithms we can find the whole island.

search across first

I assume the reader has seen breadth-search before, so I won't explain its pseudocode. If not, I recommend taking a lookon page 202by John Ericksonalgorithms, is available free of chargeHere. Here's the pseudocode for BFS as a refresher:

12345678910111213
function BFS(G, source) Is permit Q Maybe A queue label source If examined Q.line up(source) one sec Q Is NO file Again w := Q.tail() If w Is Die Goal Then return w Do Already sides apart from w Do w W G.adjacent edges(w) Again If w Is NO marked If examined Then label w If examined w.parent := w Q.line up(w)

Pseudocode outWikipedia

So let's turn our pseudocode into real code. The current coordinate we are looking at is marked by parametersIIJ. We denote nodes based on their indices, i.e. nodes wGrid[0][0]it is marked in the queue as an array[0, 0]and examined as a string"0,0". We need a comma so that multi-digit coordinates don't collide (e.g. coordinate 11, 2 and coordinate 1, 12).

1234567891011121314151617181920212222324252627282930313233343536373839
Empty BFS(char[][] network, int I, int J) { queue<int[]> queue = new Linked list<>(); Opinion<the line> examined = new HashSet<>(); queue.add to(new int[]{I, J}); examined.add to("" + I + ',' + J); one sec (!queue.it's empty()) { int Size = queue.Size(); Do (int k = 0; k < Size; k++) { int[] co-ordinates = queue.Questionnaire(); int curry I = co-ordinates[0]; int act.J = co-ordinates[1]; If ((curry I + 1) < network.Long && network[curry I + 1][act.J] == „1”) { If (!examined.contains("" + (curry I + 1) + ',' + act.J)) { queue.add to(new int[]{(curry I + 1), act.J}); examined.add to("" + (curry I + 1) + ',' + act.J); } } If ((curry I - 1) >= 0 && network[curry I - 1][act.J] == „1”) { If (!examined.contains("" + (curry I - 1) + ',' + act.J)) { queue.add to(new int[]{(curry I - 1), act.J}); examined.add to("" + (curry I - 1) + ',' + act.J); } } If ((act.J + 1) < network[0].Long && network[curry I][act.J + 1] == „1”) { If (!examined.contains("" + curry I + ',' + (act.J + 1))) { queue.add to(new int[]{curry I, (act.J + 1)}); examined.add to("" + curry I + ',' + (act.J + 1)); } } If ((act.J - 1) >= 0 && network[curry I][act.J - 1] == „1”) { If (!examined.contains("" + curry I + ',' + (act.J - 1))) { queue.add to(new int[]{curry I, (act.J - 1)}); examined.add to("" + curry I + ',' + (act.J - 1)); } } network[curry I][act.J] = „0”; } }}

TenIfThe instructions check up, down, left and right (examine the edges in our pseudocode, line 9) and make sure we're still on an "island".

Now we need a wrapper function around BFS to solve the problem.

1234567891011121314
Class Solution { public int number of islands(char[][] network) { int Result = 0; Do (int I = 0; I < network.Long; I++) { Do (int J = 0; J < network[0].Long; J++) { If (network[I][J] == „1”) { Result++; Friends(network, I, J); } } } return Result; }}

All together:

12345678910111213141516171819202122223242526272829303132333435363738394041424344454647484950515253
Class Solution { public int number of islands(char[][] network) { int Result = 0; Do (int I = 0; I < network.Long; I++) { Do (int J = 0; J < network[0].Long; J++) { If (network[I][J] == „1”) { Result++; Friends(network, I, J); } } } return Result; } Empty Friends(char[][] network, int I, int J) { queue<int[]> queue = new Linked list<>(); Opinion<the line> examined = new HashSet<>(); queue.add to(new int[]{I, J}); examined.add to("" + I + ',' + J); one sec (!queue.it's empty()) { int Size = queue.Size(); Do (int k = 0; k < Size; k++) { int[] co-ordinates = queue.Questionnaire(); int curry I = co-ordinates[0]; int act.J = co-ordinates[1]; If ((curry I + 1) < network.Long && network[curry I + 1][act.J] == „1”) { If (!examined.contains("" + (curry I + 1) + ',' + act.J)) { queue.add to(new int[]{(curry I + 1), act.J}); examined.add to("" + (curry I + 1) + ',' + act.J); } } If ((curry I - 1) >= 0 && network[curry I - 1][act.J] == „1”) { If (!examined.contains("" + (curry I - 1) + ',' + act.J)) { queue.add to(new int[]{(curry I - 1), act.J}); examined.add to("" + (curry I - 1) + ',' + act.J); } } If ((act.J + 1) < network[0].Long && network[curry I][act.J + 1] == „1”) { If (!examined.contains("" + curry I + ',' + (act.J + 1))) { queue.add to(new int[]{curry I, (act.J + 1)}); examined.add to("" + curry I + ',' + (act.J + 1)); } } If ((act.J - 1) >= 0 && network[curry I][act.J - 1] == „1”) { If (!examined.contains("" + curry I + ',' + (act.J - 1))) { queue.add to(new int[]{curry I, (act.J - 1)}); examined.add to("" + curry I + ',' + (act.J - 1)); } } network[curry I][act.J] = „0”; } } }}

depth search first

The depth-first search algorithm is simpler and recursively as it traverses the graph. I'll include the pseudocode again as a refresher. If you are seeing DFS for the first time, you can try it outpage 201apart fromalgorithms.

12345
function DFS(G, w) Is label w If outdoor Do Already directed sides apart from w Do w The If W G.adjacent edges(w) Again If top w Is NO marked If outdoor Then recursively Financial assistance DFS(G, w)

Pseudocode outWikipedia

So the final solution looks like this:

12345678910
Empty dfs(char[][] network, int I, int J) { If (I >= network.Long || I < 0 || J < 0 || J >= network[I].Long || network[I][J] == '0') { return; } network[I][J] = '0'; dfs(network, I + 1, J); dfs(network, I - 1, J); dfs(network, I, J + 1); dfs(network, I, J - 1);}

Note that this is slightly different from pseudocode. Instead of marking a vertex as discovered, we mark it as„0”to indicate that we don't need to study it - it's not part of our island. The wrapper function is identical to the BFS function, except that we call DFS instead of BFS. The full code looks like this:

12345678910111213141516171819202122232425
Class Solution { public int number of islands(char[][] network) { int Result = 0; Do (int I = 0; I < network.Long; I++) { Do (int J = 0; J < network[0].Long; J++) { If (network[I][J] == „1”) { dfs(network, I, J); Result++; } } } return Result; } Empty dfs(char[][] network, int I, int J) { If (I >= network.Long || I < 0 || J < 0 || J >= network[I].Long || network[I][J] == „0”) { return; } network[I][J] = „0”; dfs(network, I + 1, J); dfs(network, I - 1, J); dfs(network, I, J + 1); dfs(network, I, J - 1); }}

FAQs

How do you find the number of islands complexity? ›

The running time complexity for finding the number of islands for the given matrix is O(m*n), where m and n are rows and columns, respectively. The space complexity of the problem is O(min(m,n)) as in the worst case where the matrix is filled with lands, and the size of the queue can grow up to min(m,n).

What is the time complexity of the number of islands problem? ›

The time complexity of this solution is O (n*m) since we are visiting each element in the 2D array once. The space complexity if this solution is O (n*m) as well in the case whole grid is filled with '1'. Runtime: 1 ms, faster than 100.00% of Java online submissions for Number of Islands.

What is the time complexity of the DFS grid? ›

The time complexity of DFS if the entire tree is traversed is O ( V ) O(V) O(V) where V is the number of nodes. In the case of a graph, the time complexity is O ( V + E ) O(V + E) O(V+E) where V is the number of vertexes and E is the number of edges.

What is the approximate number of islands? ›

Of the approximate number of 900,000 islands globally, around 16,000 are inhabited. Approximately 11% of the world's total population, over 730 million people, lives on these islands. Some of these islands are modern and densely populated, while others are very isolated and have very few residents.

How many islands are there in one? ›

There are around 2000 Islands in the ocean and millions in the world. Some of them are tiny, and others are huge. All these islands vary in size, temperature, climate, and flora and fauna.

Can time complexity be less than 1? ›

The only thing that would take less than O(1) (constant time) would be an operation that did absolutely nothing, and thus took zero time.

What is the island size effect? ›

Foster's rule, also known as the island rule or the island effect, is an ecogeographical rule in evolutionary biology stating that members of a species get smaller or bigger depending on the resources available in the environment.

How do you calculate time complexity in DFS? ›

The time complexity of the DFS algorithm is O(V+E), where V is the number of vertices and E is the number of edges in the graph. The space complexity of the DFS algorithm is O(V).

Which time complexity is better BFS or DFS? ›

DFS is faster than BFS. Time Complexity of BFS = O(V+E) where V is vertices and E is edges. Time Complexity of DFS is also O(V+E) where V is vertices and E is edges. BFS requires more memory space.

What is the space complexity of DFS and BFS? ›

The space complexity for BFS is O(w) where w is the maximum width of the tree. For DFS, which goes along a single 'branch' all the way down and uses a stack implementation, the height of the tree matters. The space complexity for DFS is O(h) where h is the maximum height of the tree.

What group has more than 300 islands? ›

The Andamans extend north-south for about 225 miles (360 km) and include more than 300 islands, some two dozen of them inhabited. The three major islands are North Andaman, Middle Andaman, and South Andaman—closely positioned and collectively known as Great Andaman.

What has over 400 islands? ›

Great Lakes facts: Lake Superior has over 400 islands, the largest of which is Isle Royale, with a size of 207 square miles. Siskiwit Lake is the largest lake on the island.

What country has 500 islands? ›

List
CountryNo. of islandsNo. of inhabited islands
Indonesia17,5086,000
Italy808
Japan120,729430
Kiribati3321
47 more rows

Which country has 1,000 islands? ›

Along the eastern coast of the Adriatic Sea which belongs mostly to the Republic of Croatia there are more than 1000 islands.

What are the 4 types of islands? ›

There are six major kinds of islands: continental (1), tidal (2), barrier (3), oceanic (4), coral (5), and artificial (6). Continental islands (1) were once connected to a continent. They still sit on the continental shelf. Some formed as Earth's shifting continents broke apart.

Which country has 200000 islands? ›

On top of the list is Sweden, closely followed by Norway, which have over 200,000 islands each within their borders. “Sweden has 221,831 islands, about 24,000 of which are open to the public. Though Sweden is the country with the most islands in the world, less than 1,000 of them are inhabited,” World Atlas said.

What are the 3 ways of time complexity? ›

Logarithmic Time Complexity - O(log n) Linear Time Complexity - O(n) O(n log n) Time Complexity. Quadratic Time Complexity - O(n2)

What is time complexity for dummies? ›

Time complexity is defined as the amount of time taken by an algorithm to run, as a function of the length of the input. It measures the time taken to execute each statement of code in an algorithm. It is not going to examine the total execution time of an algorithm.

What is the formula for time complexity? ›

Let's use T(n) as the total time in function of the input size n , and t as the time complexity taken by a statement or group of statements. T(n) = t(statement1) + t(statement2) + ... + t(statementN); If each statement executes a basic operation, we can say it takes constant time O(1) .

Is anything faster than O 1? ›

Sometimes, O(log n) will outperform O(1) but as the input size 'n' increases, O(log n) will take more time than the execution of O(1).

Which algorithms has worst time complexity? ›

The worst case best run time complexity is O(nlogn) which is given by -Merge Sort and Heap Sort. Was this answer helpful?

Does time complexity really matter? ›

To sum up, the better the time complexity of an algorithm is, the faster the algorithm will carry out the work in practice. You should take into account this matter when designing or managing algorithms, and consider that it can make a big difference as to whether an algorithm is practical or completely useless.

What is the Big island theory? ›

The theory of island biogeography explains that the biodiversity and number of species inhabiting an island is impacted by the island's land size and degree of isolation. Larger, less isolated islands have higher numbers of species, while smaller, more isolated islands have lower numbers of species.

What is the average island size? ›

The average kitchen island size (according to a variety of experts) is approximately 80 x 40 inches.

Does island size determine extinction rate? ›

Once a species manages to reach and colonize an island, the rate of extinction is largely influenced by size of the island. This is because smaller islands tend to hold smaller populations (which are more likely to experience extinction due to stochastic effects like genetic drift).

Why is Dijkstra time complexity? ›

Time complexity of Dijkstra's algorithm is O ( V 2 ) O(V^2) O(V2) where V is the number of verices in the graph. It can be explained as below: First thing we need to do is find the unvisited vertex with the smallest path. For that we require O ( V ) O(V) O(V) time as we need check all the vertices.

What is best first search technique? ›

The best first search uses the concept of a priority queue and heuristic search. It is a search algorithm that works on a specific rule. The aim is to reach the goal from the initial state via the shortest path.

How many times a node is visited in DFS? ›

Explanation: The Depth First Search explores every node once and every edge once (in worst case), so it's time complexity is O(V + E).

How do you find the complexity of a neural network? ›

In general, the complexity of a neural network structure is measured by the number of free parameters in the network; that is, the number of neurons and the number and strength of connections between neurons (weights).

What is the time complexity to count number of nodes? ›

Time Complexity: O(log^2 N).

How to find the time complexity of a sum of n natural numbers? ›

Input/Output:

The time complexity is the same as the time complexity of the function. We are using for loop in our function, and we already saw that using for loop, N operations are performed to calculate the sum of the first N natural numbers. Thus, the time complexity is O ( N ) O(N) O(N).

How many islands are there in the map? ›

There are 1,192 in total, of which 187 are inhabited. They are listed by administrative division/atoll.

References

Top Articles
Latest Posts
Article information

Author: Horacio Brakus JD

Last Updated: 03/11/2023

Views: 5794

Rating: 4 / 5 (51 voted)

Reviews: 82% of readers found this page helpful

Author information

Name: Horacio Brakus JD

Birthday: 1999-08-21

Address: Apt. 524 43384 Minnie Prairie, South Edda, MA 62804

Phone: +5931039998219

Job: Sales Strategist

Hobby: Sculling, Kitesurfing, Orienteering, Painting, Computer programming, Creative writing, Scuba diving

Introduction: My name is Horacio Brakus JD, I am a lively, splendid, jolly, vivacious, vast, cheerful, agreeable person who loves writing and wants to share my knowledge and understanding with you.