博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
岛屿的周长 Island Perimeter
阅读量:6497 次
发布时间:2019-06-24

本文共 1918 字,大约阅读时间需要 6 分钟。

hot3.png

问题:

You are given a map in form of a two-dimensional integer grid where 1 represents land and 0 represents water. Grid cells are connected horizontally/vertically (not diagonally). The grid is completely surrounded by water, and there is exactly one island (i.e., one or more connected land cells). The island doesn't have "lakes" (water inside that isn't connected to the water around the island). One cell is a square with side length 1. The grid is rectangular, width and height don't exceed 100. Determine the perimeter of the island.

Example:

[[0,1,0,0], [1,1,1,0], [0,1,0,0], [1,1,0,0]]Answer: 16Explanation: The perimeter is the 16 yellow stripes in the image below:

解决:

①扫描数组,值为1时周长加4,然后看上下左右的值是否为1,若是,则减去相邻的边。耗时162ms。

public class Solution {

    public int islandPerimeter(int[][] grid) {
        int len1 = grid.length;
        int perimeter = 0;
        for (int i = 0;i < len1 ;i ++ ) {
            int len2 = grid[i].length;
            for (int j = 0;j < len2 ;j ++ ) {
                if (grid[i][j] == 1) {
                    perimeter += 4;
                    if(j + 1 < len2 && grid[i][j + 1] == 1){//左
                        perimeter -= 1;
                    }
                    if (j - 1 >= 0 && grid[i][j - 1] == 1) {//右
                        perimeter -= 1;
                    }
                    if (i + 1 < len1 && grid[i + 1][j] == 1) {//下
                        perimeter -= 1;
                    }
                    if (i - 1 >= 0 && grid[i - 1][j] == 1) {//上
                        perimeter -= 1;
                    }
                }
            }
        }
        return perimeter;
    }
}

②思路大体上与上面一致,但是按照下面的方法来写更简单。耗时118ms。

public class Solution {

    public int islandPerimeter(int[][] grid) {
        int len1 = grid.length;
        int len2 = grid[0].length;
        int perimeter = 0;
        for (int i = 0;i < len1 ;i ++ ) {
            for (int j = 0;j < len2 ;j ++ ) {
                if (grid[i][j] == 0) {
                    continue;
                }
                if (i - 1 < 0 || i - 1 >= 0 && grid[i - 1][j] == 0) {//上边
                    perimeter ++;
                }
                if (j - 1 < 0 || j - 1 >= 0 && grid[i][j - 1] == 0) {//左边
                    perimeter ++;
                }
                if (i + 1 == len1 || i + 1 < len1 && grid[i + 1][j] == 0) {
                    perimeter ++;
                }
                if (j + 1 == len2 || j + 1 < len2 && grid[i][j + 1] == 0) {
                    perimeter ++;
                }
            }     
        } 
        return perimeter;
    }  
}

③不知道要怎么用hash表,之后再改吧

转载于:https://my.oschina.net/liyurong/blog/916441

你可能感兴趣的文章
bzoj1030[JSOI2007]文本生成器
查看>>
mvc学习地址
查看>>
masonry 基本用法
查看>>
使用openssl创建自签名证书及部署到IIS教程
查看>>
Word产品需求文档,已经过时了【转】
查看>>
dtoj#4299. 图(graph)
查看>>
关于网站的一些js和css常见问题的记录
查看>>
zabbix-3.4 触发器
查看>>
换用代理IP的Webbrowser方法
查看>>
【视频编解码·学习笔记】7. 熵编码算法:基础知识 & 哈夫曼编码
查看>>
spark集群安装部署
查看>>
笔试面试
查看>>
Tomcat v7.0 Server at localhost are already in use,tomcat提示端口被占用,tomcat端口已经被使用,tomcat端口占用...
查看>>
UGUI之控件以及按钮的监听事件系统
查看>>
Codeforces 814A - An abandoned sentiment from past(水题)
查看>>
POJ 2349 Arctic Network (最小生成树Kruskal)
查看>>
vmstat
查看>>
springboot集成mybatis-generator
查看>>
org.springframework.beans.NotWritablePropertyException
查看>>
【VB6】VB6实现拖拽
查看>>