diff --git a/LeetcodeProblems/Max_Area_Of_Island.js b/LeetcodeProblems/Max_Area_Of_Island.js new file mode 100644 index 0000000..32c82a2 --- /dev/null +++ b/LeetcodeProblems/Max_Area_Of_Island.js @@ -0,0 +1,52 @@ +/* +Max Area of Island + +Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) connected 4-directionally (horizontal or vertical.) You may assume all four edges of the grid are surrounded by water. + +Find the maximum area of an island in the given 2D array. (If there is no island, the maximum area is 0.) + +Example 1: + +[[0,0,1,0,0,0,0,1,0,0,0,0,0], + [0,0,0,0,0,0,0,1,1,1,0,0,0], + [0,1,1,0,1,0,0,0,0,0,0,0,0], + [0,1,0,0,1,1,0,0,1,0,1,0,0], + [0,1,0,0,1,1,0,0,1,1,1,0,0], + [0,0,0,0,0,0,0,0,0,0,1,0,0], + [0,0,0,0,0,0,0,1,1,1,0,0,0], + [0,0,0,0,0,0,0,1,1,0,0,0,0]] +Given the above grid, return 6. Note the answer is not 11, because the island must be connected 4-directionally. +Example 2: + +[[0,0,0,0,0,0,0,0]] +Given the above grid, return 0. +Note: The length of each dimension in the given grid does not exceed 50. +*/ + +/** + * @param {number[][]} grid + * @return {number} + */ +var maxAreaOfIsland = function(grid) { + var maxArea = 0; + + for(var i = 0; i < grid.length; i++) { + for(var j = 0; j < grid[0].length; j++) { + maxArea = Math.max(markIsland(i, j, grid), maxArea); + } + } + + return maxArea; +}; + +var markIsland = function(row, col, grid) { + if(row < 0 || row >= grid.length || col < 0 || col >= grid[0].length || grid[row][col] == 0) { + return 0; + } + + grid[row][col] = 0; + return 1 + markIsland(row + 1, col, grid) + markIsland(row - 1, col, grid) + + markIsland(row, col +1, grid) + markIsland(row, col - 1, grid); +} + +module.exports.maxAreaOfIsland = maxAreaOfIsland; diff --git a/LeetcodeProblemsTests/Max_Area_Of_Island_Test.js b/LeetcodeProblemsTests/Max_Area_Of_Island_Test.js new file mode 100644 index 0000000..d243dce --- /dev/null +++ b/LeetcodeProblemsTests/Max_Area_Of_Island_Test.js @@ -0,0 +1,51 @@ +const assert = require('assert'); +const { maxAreaOfIsland } = require('../LeetcodeProblems/Max_Area_Of_Island'); + +function test1() { + var matrix = [ + [0,0,1,0,0,0,0,1,0,0,0,0,0], + [0,0,0,0,0,0,0,1,1,1,0,0,0], + [0,1,1,0,1,0,0,0,0,0,0,0,0], + [0,1,0,0,1,1,0,0,1,0,1,0,0], + [0,1,0,0,1,1,0,0,1,1,1,0,0], + [0,0,0,0,0,0,0,0,0,0,1,0,0], + [0,0,0,0,0,0,0,1,1,1,0,0,0], + [0,0,0,0,0,0,0,1,1,0,0,0,0] + ] + + assert.strictEqual(maxAreaOfIsland(matrix), 6); +} + +function test2() { + var matrix = [ + [0, 1, 1, 0, 0], + [0, 1, 1, 0, 0], + [0, 0, 1, 0, 1], + [0, 1, 0, 0, 1], + [0, 1, 1, 0, 1], + [0, 0, 0, 0, 0], + ] + + assert.strictEqual(maxAreaOfIsland(matrix), 5); +} + +function test3() { + var matrix = [ + [0, 1, 0, 0, 0], + [0, 1, 1, 1, 1], + [0, 0, 0, 0, 1], + [0, 1, 1, 1, 1], + [0, 0, 1, 0, 0], + [0, 0, 0, 0, 0], + ] + + assert.strictEqual(maxAreaOfIsland(matrix), 11); +} + +function test() { + test1(); + test2(); + test3(); +} + +module.exports.test = test diff --git a/README.md b/README.md index 342de61..ba3cb71 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,8 @@ To run a specific problem in your console, go to the file test, add the call to | [Group Anagrams ](/LeetcodeProblems/Group_Anagrams.js) | Medium | https://leetcode.com/problems/group-anagrams/ | [Kth Largest Element in an Array ](/LeetcodeProblems/Kth_Largest_Element_in_an_Array.js) | Medium | https://leetcode.com/problems/kth-largest-element-in-an-array/ | | [Linked List Cycle II ](/LeetcodeProblems/Linked_List_Cycle_II.js) | Medium | https://leetcode.com/problems/linked-list-cycle-ii/ | -| [Longest Palindromic Substring ](/LeetcodeProblems/Longest_Palindromic_Substring.js) | Medium | https://leetcode.com/problems/longest-palindromic-substring/ | +| [Longest Palindromic Substring ](/LeetcodeProblems/Longest_Palindromic_Substring.js) | Medium | https://leetcode.com/problems/longest-palindromic-substring/| +| [Max Area Of Island](https://leetcode.com/problems/max-area-of-island/) | Medium | https://leetcode.com/problems/max-area-of-island/ | | [Maximal Square ](/LeetcodeProblems/Maximal_Square.js) | Medium | https://leetcode.com/problems/maximal-square/ | | [Permutations ](/LeetcodeProblems/Permutations.js) | Medium | https://leetcode.com/problems/permutations/ | | [Permutations II ](/LeetcodeProblems/Permutations_II.js) | Medium | https://leetcode.com/problems/permutations-ii/ |