Skip to content

Instantly share code, notes, and snippets.

@karenpeng
Last active January 31, 2016 22:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save karenpeng/a743ba889d9d783b8e5d to your computer and use it in GitHub Desktop.
Save karenpeng/a743ba889d9d783b8e5d to your computer and use it in GitHub Desktop.
var assert = require('assert')
/**
* @param {character[][]} grid
* @return {number}
*/
var numIslands = function(grid) {
var count = 0
var max = -Infinity
var min = Infinity
for(var i = 0; i < grid.length; i++){
for(var j = 0; j < grid[0].length; j++){
if(grid[i][j] === '1'){
count++
var n = bfs(grid, i, j)
console.log(n)
max = Math.max(max, n)
min = Math.min(min, n)
}
}
}
return [max, min]
};
function bfs(grid, x, y){
var queue = []
var number = 0
grid[x][y] = '2'
queue.push([x,y])
while(queue.length > 0){
var node = queue.shift()
number++
var _x = node[0]
var _y = node[1]
if(helper(grid, _x + 1, _y)) queue.push([_x + 1, _y])
if(helper(grid, _x - 1, _y)) queue.push([_x - 1, _y])
if(helper(grid, _x, _y + 1)) queue.push([_x, _y + 1])
if(helper(grid, _x, _y - 1)) queue.push([_x, _y - 1])
}
return number
}
function helper(grid, x, y){
if(grid[x] === undefined || grid[x][y] === undefined) return false
if(grid[x][y] !== '1') return false
grid[x][y] = '2'
return true
}
var input = [
['1','1','0','0','0'],
['1','1','0','1','0'],
['1','1','0','0','0'],
['0','0','0','0','0']]
assert.deepEqual(numIslands(input), [6, 1])
var assert = require('assert')
/**
* @param {character[][]} grid
* @return {number}
*/
var numIslands = function(grid) {
var count = 0
var max = -Infinity
var min = Infinity
for(var i = 0; i < grid.length; i++){
for(var j = 0; j < grid[0].length; j++){
if(grid[i][j] === '1'){
count++
var n = dfs(grid, i, j, 0)
console.log(n)
max = Math.max(max, n)
min = Math.min(min, n)
}
}
}
return [max, min]
};
function dfs(grid, i, j){
if(grid[i] === undefined || grid[i][j] === undefined) return 0
if(grid[i][j] !== '1') return 0
grid[i][j] = '2'
return(
dfs(grid, i+1, j) +
dfs(grid, i-1, j) +
dfs(grid, i, j+1) +
dfs(grid, i, j-1) + 1)
}
var input = [
['1','1','0','0','0'],
['1','1','0','1','0'],
['1','1','0','0','0'],
['0','0','0','0','0']]
assert.deepEqual(numIslands(input), [6, 1])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment