LeetCode695.島嶼的最大面積

原題鏈接:島嶼的最大面積

題目描述

  • 給定一個(gè)包含了一些01的非空二維數(shù)組grid际度,一個(gè)島嶼是由四個(gè)方向(水平或垂直)的1(代表土地)構(gòu)成的組合。你可以假設(shè)二維矩陣的四個(gè)邊緣都被水包圍著涵妥。
  • 找到給定的二維數(shù)組中最大的島嶼面積乖菱。
  • 如果沒(méi)有島嶼,則返回面積為0蓬网。
示例 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]]
  • 對(duì)于上面這個(gè)給定矩陣應(yīng)返回6窒所。
  • 注意答案不應(yīng)該是11,因?yàn)閸u嶼只能包含水平或垂直的四個(gè)方向的1帆锋。
示例 2
[[0,0,0,0,0,0,0,0]]
  • 對(duì)于上面這個(gè)給定的矩陣吵取,返回0
其他注意事項(xiàng)
  • 給定的矩陣grid的長(zhǎng)度和寬度都不超過(guò)50锯厢。

思路描述

核心——DFS問(wèn)題皮官。
  1. 首先需要一個(gè)DFS方法,如果該點(diǎn)為1实辑,則向四個(gè)方向遞歸捺氢;如果該點(diǎn)為0,則方法直接返回剪撬。該方法需要判斷邊界情況摄乒。
  2. 需要一個(gè)跟grid大小一樣的boolean visited[][]數(shù)組來(lái)記錄該點(diǎn)是否已訪問(wèn),防止重復(fù)訪問(wèn)残黑。
  3. 外層雙重循環(huán)遍歷所有的點(diǎn)馍佑,并比較每個(gè)點(diǎn)的DFS方法返回值,得到最大值梨水。
class Solution {
    public int maxAreaOfIsland(int[][] grid) {
        // 記錄該節(jié)點(diǎn)是否訪問(wèn)過(guò)
        boolean[][] visited = new boolean[grid.length][grid[0].length];
        // 記錄最大值
        int max = 0;

        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[i].length; j++) {
                max = Math.max(max, dfs(i, j, grid, visited));
            }
        }
        return max;
    }

    private int dfs(int i, int j, int[][] grid, boolean[][] visited) {
        // 邊界判斷
        if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length) {
            return 0;
        }
        // 重復(fù)訪問(wèn)判斷
        if (visited[i][j]) {
            return 0;
        }
        // 島嶼為0拭荤、1判斷
        if (grid[i][j] == 0) {
            return 0;
        }
        // 標(biāo)記該點(diǎn)為已訪問(wèn)
        visited[i][j] = true;
        // 四個(gè)方向遞歸
        return 1 + dfs(i-1, j, grid, visited)
                + dfs(i+1, j, grid, visited)
                + dfs(i, j-1, grid, visited)
                + dfs(i, j+1, grid, visited);
    }
}

優(yōu)化思路

  • 如果原grid數(shù)組可以被修改,那么可以不使用輔助空間visited[][]二維數(shù)組疫诽,直接修改原數(shù)組來(lái)做標(biāo)記
class Solution {
    public int maxAreaOfIsland(int[][] grid) {
        // 記錄最大值
        int max = 0;

        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[i].length; j++) {
                int temp = DFS(i, j, grid);
                max = temp > max ? temp : max;
            }
        }
        return max;
    }

    public int DFS(int i, int j, int[][] grid) {
        // 邊界判斷
        if (i < 0 || j < 0 || i >= grid.length || j >= grid[0].length) {
            return 0;
        }

        // 島嶼為0穷劈、1判斷
        if (grid[i][j] == 0) {
            return 0;
        }

        // 標(biāo)記grid[i][j] = 0
        grid[i][j] = 0;
        // 四個(gè)方向遞歸
        return 1 + DFS(i-1, j, grid)
                + DFS(i+1, j, grid)
                + DFS(i, j-1, grid)
                + DFS(i, j+1, grid);
    }
}

一年又一年,字節(jié)跳動(dòng) Lark(飛書) 研發(fā)團(tuán)隊(duì)又雙叒叕開始招新生啦踊沸!
【內(nèi)推碼】:GTPUVBA
【內(nèi)推鏈接】:https://job.toutiao.com/s/JRupWVj
【招生對(duì)象】:20年9月后~21年8月前 畢業(yè)的同學(xué)
【報(bào)名時(shí)間】:6.16-7.16(提前批簡(jiǎn)歷投遞只有一個(gè)月抓住機(jī)會(huì)哦P铡)
【畫重點(diǎn)】:提前批和正式秋招不矛盾!面試成功逼龟,提前鎖定Offer评凝;若有失利,額外獲得一次面試機(jī)會(huì)腺律,正式秋招開啟后還可再次投遞奕短。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宜肉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子翎碑,更是在濱河造成了極大的恐慌谬返,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件日杈,死亡現(xiàn)場(chǎng)離奇詭異遣铝,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)莉擒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門酿炸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人涨冀,你說(shuō)我怎么就攤上這事填硕。” “怎么了鹿鳖?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵扁眯,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我翅帜,道長(zhǎng)恋拍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任藕甩,我火速辦了婚禮,結(jié)果婚禮上周荐,老公的妹妹穿的比我還像新娘狭莱。我一直安慰自己,他們只是感情好概作,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布腋妙。 她就那樣靜靜地躺著,像睡著了一般讯榕。 火紅的嫁衣襯著肌膚如雪骤素。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天愚屁,我揣著相機(jī)與錄音济竹,去河邊找鬼。 笑死霎槐,一個(gè)胖子當(dāng)著我的面吹牛送浊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丘跌,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼袭景,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼唁桩!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起耸棒,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤荒澡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后与殃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體单山,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年奈籽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了饥侵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡衣屏,死狀恐怖躏升,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狼忱,我是刑警寧澤膨疏,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站钻弄,受9級(jí)特大地震影響佃却,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窘俺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一饲帅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瘤泪,春花似錦灶泵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至实檀,卻和暖如春惶洲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背膳犹。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工恬吕, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人须床。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓币呵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子余赢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 深度優(yōu)先 DFS 1. 題目 https://leetcode-cn.com/problems/max-area...
    FlyCharles閱讀 649評(píng)論 0 0
  • 島嶼的最大面積 題目敘述: 給定一個(gè)包含了一些 0 和 1的非空二維數(shù)組 grid , 一個(gè) 島嶼 是由四個(gè)方向 ...
    一萍之春閱讀 2,056評(píng)論 0 2
  • matlab命令 聲明:本文轉(zhuǎn)自:https://www.douban.com/note/136332003/ 侵...
    我就是個(gè)初學(xué)者閱讀 13,835評(píng)論 0 44
  • 困境往往會(huì)造成兩個(gè)極端芯义,一個(gè)是奮發(fā)向上,一個(gè)是一蹶不振妻柒。因此這兩個(gè)極端也造成了兩種結(jié)果,一種是擺脫举塔,一種是屈服绑警。
    菩提使者閱讀 641評(píng)論 0 3
  • 天空陰沉昏暗 ,零星小雨時(shí)斷時(shí)續(xù)央渣,遠(yuǎn)處山巒起伏 计盒,迷霧籠罩。 車子沿著蜿蜒曲折的山路 芽丹,匍匐而上北启。幾...
    官小姐不當(dāng)官閱讀 365評(píng)論 0 2