最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

2023-05-07:給你一個(gè)大小為 n x n 二進(jìn)制矩陣 grid 。最多 只能將一格 0 變成 1 。

2023-05-07 20:05 作者:福大大架構(gòu)師每日一題  | 我要投稿

2023-05-07:給你一個(gè)大小為 n x n 二進(jìn)制矩陣 grid 。最多 只能將一格 0 變成 1 。

返回執(zhí)行此操作后,grid 中最大的島嶼面積是多少?

島嶼 由一組上、下、左、右四個(gè)方向相連的 1 形成。

輸入: grid = [[1, 0], [0, 1]]。

輸出: 3。

來自亞馬遜、谷歌、微軟、Facebook、Bloomberg。

答案2023-05-07:

算法步驟:

1.遍歷輸入矩陣?grid,對(duì)于每個(gè)島嶼進(jìn)行標(biāo)記,并用數(shù)組?sizes?統(tǒng)計(jì)每個(gè)島嶼的大小。

2.遍歷矩陣?grid,對(duì)于每個(gè)位置上的值,如果當(dāng)前位置上的值為非零正整數(shù),則更新答案為當(dāng)前島嶼的大小。

3.遍歷矩陣?grid,當(dāng)當(dāng)前位置上的值為 0 時(shí),分別查看該位置上、下、左、右四個(gè)方向是否有與其相鄰且已經(jīng)被訪問過的島嶼,并將它們的大小累加起來。如果這些島嶼的大小之和加上當(dāng)前位置上自身的大小可以更新最大島嶼面積,則更新答案。

4.返回答案。

時(shí)間復(fù)雜度:$O(n^2)$ ,遍歷了三次矩陣,每次遍歷的時(shí)間復(fù)雜度均為 $O(n^2)$。

空間復(fù)雜度:$O(n^2)$,使用了兩個(gè)二維數(shù)組,每個(gè)數(shù)組都是 $n \times n$ 的大小。

go完整代碼如下:

package?main

import?"fmt"

func?main()?{
????grid?:=?[][]int{{1,?0},?{0,?1}}
????ans?:=?largestIsland(grid)
????fmt.Println(ans)
}

func?largestIsland(grid?[][]int)?int?{
????n?:=?len(grid)
????m?:=?len(grid[0])
????id?:=?2
????for?i?:=?0;?i?<?n;?i++?{
????????for?j?:=?0;?j?<?m;?j++?{
????????????if?grid[i][j]?==?1?{
????????????????infect(grid,?i,?j,?id,?n,?m)
????????????????id++
????????????}
????????}
????}
????sizes?:=?make([]int,?id)
????ans?:=?0
????for?i?:=?0;?i?<?n;?i++?{
????????for?j?:=?0;?j?<?m;?j++?{
????????????if?grid[i][j]?>?1?{
????????????????sizes[grid[i][j]]++
????????????????ans?=?max(ans,?sizes[grid[i][j]])
????????????}
????????}
????}
????visited?:=?make([]bool,?id)
????for?i?:=?0;?i?<?n;?i++?{
????????for?j?:=?0;?j?<?m;?j++?{
????????????if?grid[i][j]?==?0?{
????????????????up?:=?0
????????????????if?i-1?>=?0?{
????????????????????up?=?grid[i-1][j]
????????????????}
????????????????down?:=?0
????????????????if?i+1?<?n?{
????????????????????down?=?grid[i+1][j]
????????????????}
????????????????left?:=?0
????????????????if?j-1?>=?0?{
????????????????????left?=?grid[i][j-1]
????????????????}
????????????????right?:=?0
????????????????if?j+1?<?m?{
????????????????????right?=?grid[i][j+1]
????????????????}
????????????????merge?:=?1?+?sizes[up]
????????????????visited[up]?=?true
????????????????if?!visited[down]?{
????????????????????merge?+=?sizes[down]
????????????????????visited[down]?=?true
????????????????}
????????????????if?!visited[left]?{
????????????????????merge?+=?sizes[left]
????????????????????visited[left]?=?true
????????????????}
????????????????if?!visited[right]?{
????????????????????merge?+=?sizes[right]
????????????????????visited[right]?=?true
????????????????}
????????????????ans?=?max(ans,?merge)
????????????????visited[up]?=?false
????????????????visited[down]?=?false
????????????????visited[left]?=?false
????????????????visited[right]?=?false
????????????}
????????}
????}
????return?ans
}

func?infect(grid?[][]int,?i,?j,?v,?n,?m?int)?{
????if?i?<?0?||?i?==?n?||?j?<?0?||?j?==?m?||?grid[i][j]?!=?1?{
????????return
????}
????grid[i][j]?=?v
????infect(grid,?i-1,?j,?v,?n,?m)
????infect(grid,?i+1,?j,?v,?n,?m)
????infect(grid,?i,?j-1,?v,?n,?m)
????infect(grid,?i,?j+1,?v,?n,?m)
}

func?max(a,?b?int)?int?{
????if?a?>?b?{
????????return?a
????}
????return?b
}

圖片
在這里插入圖片描述

rust完整代碼如下:

fn?main()?{
????let?grid?=?vec![vec![1,?0],?vec![0,?1]];
????let?ans?=?largest_island(grid);
????println!("{}",?ans);
}

fn?largest_island(grid:?Vec<Vec<i32>>)?->?i32?{
????let?n?=?grid.len();
????let?m?=?grid[0].len();
????let?mut?id?=?2;
????let?mut?new_grid?=?grid.clone();
????for?i?in?0..n?{
????????for?j?in?0..m?{
????????????if?new_grid[i][j]?==?1?{
????????????????infect(&mut?new_grid,?i?as?i32,?j?as?i32,?id,?n?as?i32,?m?as?i32);
????????????????id?+=?1;
????????????}
????????}
????}
????let?mut?sizes?=?vec![0;?id?as?usize];
????let?mut?ans?=?0;
????for?i?in?0..n?{
????????for?j?in?0..m?{
????????????if?new_grid[i][j]?>?1?{
????????????????sizes[new_grid[i][j]?as?usize]?+=?1;
????????????????ans?=?ans.max(sizes[new_grid[i][j]?as?usize]);
????????????}
????????}
????}
????let?mut?visited?=?vec![false;?id?as?usize];
????for?i?in?0..n?{
????????for?j?in?0..m?{
????????????if?new_grid[i][j]?==?0?{
????????????????let?up?=?if?i?>?0?{?new_grid[i?-?1][j]?}?else?{?0?};
????????????????let?down?=?if?i?<?n?-?1?{?new_grid[i?+?1][j]?}?else?{?0?};
????????????????let?left?=?if?j?>?0?{?new_grid[i][j?-?1]?}?else?{?0?};
????????????????let?right?=?if?j?<?m?-?1?{?new_grid[i][j?+?1]?}?else?{?0?};
????????????????let?mut?merge?=?1;
????????????????if?up?>?0?&&?!visited[up?as?usize]?{
????????????????????visited[up?as?usize]?=?true;
????????????????????merge?+=?sizes[up?as?usize];
????????????????}
????????????????if?down?>?0?&&?!visited[down?as?usize]?{
????????????????????visited[down?as?usize]?=?true;
????????????????????merge?+=?sizes[down?as?usize];
????????????????}
????????????????if?left?>?0?&&?!visited[left?as?usize]?{
????????????????????visited[left?as?usize]?=?true;
????????????????????merge?+=?sizes[left?as?usize];
????????????????}
????????????????if?right?>?0?&&?!visited[right?as?usize]?{
????????????????????visited[right?as?usize]?=?true;
????????????????????merge?+=?sizes[right?as?usize];
????????????????}
????????????????ans?=?ans.max(merge);
????????????????visited[up?as?usize]?=?false;
????????????????visited[down?as?usize]?=?false;
????????????????visited[left?as?usize]?=?false;
????????????????visited[right?as?usize]?=?false;
????????????}
????????}
????}
????ans
}

fn?infect(grid:?&mut?Vec<Vec<i32>>,?i:?i32,?j:?i32,?v:?i32,?n:?i32,?m:?i32)?{
????if?i?<?0?||?i?==?n?||?j?<?0?||?j?==?m?||?grid[i?as?usize][j?as?usize]?!=?1?{
????????return;
????}
????grid[i?as?usize][j?as?usize]?=?v;
????infect(grid,?i?-?1,?j,?v,?n,?m);
????infect(grid,?i?+?1,?j,?v,?n,?m);
????infect(grid,?i,?j?-?1,?v,?n,?m);
????infect(grid,?i,?j?+?1,?v,?n,?m);
}

c完整代碼如下:

#include?<stdio.h>
#include?<stdbool.h>
#include?<string.h>
#define?MAX_SIZE?50

void?infect(int?grid[][MAX_SIZE],?int?i,?int?j,?int?v,?int?n,?int?m);
int?largestIsland(int?grid[][MAX_SIZE],?int?n,?int?m);

int?main()?{
????int?grid[][MAX_SIZE]?=?{?{1,?0},?{0,?1}?};
????int?n?=?2;
????int?m?=?2;
????int?ans?=?largestIsland(grid,?n,?m);
????printf("%d\n",?ans);?//?輸出?3
????return?0;
}

int?largestIsland(int?grid[][MAX_SIZE],?int?n,?int?m)?{
????int?id?=?2;
????for?(int?i?=?0;?i?<?n;?i++)?{
????????for?(int?j?=?0;?j?<?m;?j++)?{
????????????if?(grid[i][j]?==?1)?{
????????????????infect(grid,?i,?j,?id++,?n,?m);
????????????}
????????}
????}
????int?sizes[MAX_SIZE?*?MAX_SIZE];
????memset(sizes,?0,?sizeof(sizes));
????int?ans?=?0;
????for?(int?i?=?0;?i?<?n;?i++)?{
????????for?(int?j?=?0;?j?<?m;?j++)?{
????????????if?(grid[i][j]?>?1)?{
????????????????ans?=?ans?>?++sizes[grid[i][j]]???ans?:?sizes[grid[i][j]];
????????????}
????????}
????}
????bool?visited[MAX_SIZE?*?MAX_SIZE]?=?{?false?};
????for?(int?i?=?0;?i?<?n;?i++)?{
????????for?(int?j?=?0;?j?<?m;?j++)?{
????????????if?(grid[i][j]?==?0)?{
????????????????int?up?=?i?-?1?>=?0???grid[i?-?1][j]?:?0;
????????????????int?down?=?i?+?1?<?n???grid[i?+?1][j]?:?0;
????????????????int?left?=?j?-?1?>=?0???grid[i][j?-?1]?:?0;
????????????????int?right?=?j?+?1?<?m???grid[i][j?+?1]?:?0;
????????????????int?merge?=?1?+?sizes[up];
????????????????visited[up]?=?true;
????????????????if?(!visited[down])?{
????????????????????merge?+=?sizes[down];
????????????????????visited[down]?=?true;
????????????????}
????????????????if?(!visited[left])?{
????????????????????merge?+=?sizes[left];
????????????????????visited[left]?=?true;
????????????????}
????????????????if?(!visited[right])?{
????????????????????merge?+=?sizes[right];
????????????????????visited[right]?=?true;
????????????????}
????????????????ans?=?ans?>?merge???ans?:?merge;
????????????????visited[up]?=?false;
????????????????visited[down]?=?false;
????????????????visited[left]?=?false;
????????????????visited[right]?=?false;
????????????}
????????}
????}
????return?ans;
}

void?infect(int?grid[][MAX_SIZE],?int?i,?int?j,?int?v,?int?n,?int?m)?{
????if?(i?<?0?||?i?==?n?||?j?<?0?||?j?==?m?||?grid[i][j]?!=?1)?{
????????return;
????}
????grid[i][j]?=?v;
????infect(grid,?i?-?1,?j,?v,?n,?m);
????infect(grid,?i?+?1,?j,?v,?n,?m);
????infect(grid,?i,?j?-?1,?v,?n,?m);
????infect(grid,?i,?j?+?1,?v,?n,?m);
}

c++完整代碼如下:

#include?<iostream>
#include?<cstring>
#define?MAX_SIZE?50

using?namespace?std;

void?infect(int?grid[][MAX_SIZE],?int?i,?int?j,?int?v,?int?n,?int?m);
int?largestIsland(int?grid[][MAX_SIZE],?int?n,?int?m);

int?main()?{
????int?grid[][MAX_SIZE]?=?{?{1,?0},?{0,?1}?};
????int?n?=?2;
????int?m?=?2;
????int?ans?=?largestIsland(grid,?n,?m);
????cout?<<?ans?<<?endl;
????return?0;
}

int?largestIsland(int?grid[][MAX_SIZE],?int?n,?int?m)?{
????int?id?=?2;
????for?(int?i?=?0;?i?<?n;?i++)?{
????????for?(int?j?=?0;?j?<?m;?j++)?{
????????????if?(grid[i][j]?==?1)?{
????????????????infect(grid,?i,?j,?id++,?n,?m);
????????????}
????????}
????}
????int?sizes[MAX_SIZE?*?MAX_SIZE];
????memset(sizes,?0,?sizeof(sizes));?//?初始化為0
????int?ans?=?0;
????for?(int?i?=?0;?i?<?n;?i++)?{
????????for?(int?j?=?0;?j?<?m;?j++)?{
????????????if?(grid[i][j]?>?1)?{
????????????????ans?=?max(ans,?++sizes[grid[i][j]]);
????????????}
????????}
????}
????bool?visited[MAX_SIZE?*?MAX_SIZE]?=?{?false?};?//?初始化為false
????for?(int?i?=?0;?i?<?n;?i++)?{
????????for?(int?j?=?0;?j?<?m;?j++)?{
????????????if?(grid[i][j]?==?0)?{
????????????????int?up?=?i?-?1?>=?0???grid[i?-?1][j]?:?0;
????????????????int?down?=?i?+?1?<?n???grid[i?+?1][j]?:?0;
????????????????int?left?=?j?-?1?>=?0???grid[i][j?-?1]?:?0;
????????????????int?right?=?j?+?1?<?m???grid[i][j?+?1]?:?0;
????????????????int?merge?=?1?+?sizes[up];
????????????????visited[up]?=?true;
????????????????if?(!visited[down])?{
????????????????????merge?+=?sizes[down];
????????????????????visited[down]?=?true;
????????????????}
????????????????if?(!visited[left])?{
????????????????????merge?+=?sizes[left];
????????????????????visited[left]?=?true;
????????????????}
????????????????if?(!visited[right])?{
????????????????????merge?+=?sizes[right];
????????????????????visited[right]?=?true;
????????????????}
????????????????ans?=?max(ans,?merge);
????????????????visited[up]?=?false;
????????????????visited[down]?=?false;
????????????????visited[left]?=?false;
????????????????visited[right]?=?false;
????????????}
????????}
????}
????return?ans;
}

void?infect(int?grid[][MAX_SIZE],?int?i,?int?j,?int?v,?int?n,?int?m)?{
????if?(i?<?0?||?i?==?n?||?j?<?0?||?j?==?m?||?grid[i][j]?!=?1)?{
????????return;
????}
????grid[i][j]?=?v;
????infect(grid,?i?-?1,?j,?v,?n,?m);
????infect(grid,?i?+?1,?j,?v,?n,?m);
????infect(grid,?i,?j?-?1,?v,?n,?m);
????infect(grid,?i,?j?+?1,?v,?n,?m);
}

圖片
在這里插入圖片描述

福大大架構(gòu)師每日一題

java當(dāng)死,golang當(dāng)立。最新面試題,涉及golang,rust,mysql,redis,云原生,算法,分布式,網(wǎng)絡(luò),操作系統(tǒng)。

496篇原創(chuàng)內(nèi)容

公眾號(hào)



2023-05-07:給你一個(gè)大小為 n x n 二進(jìn)制矩陣 grid 。最多 只能將一格 0 變成 1 。的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
南通市| 海伦市| 凉山| 淮南市| 禄丰县| 芒康县| 昭平县| 朔州市| 德州市| 太康县| 沛县| 安国市| 聂拉木县| 九寨沟县| 通化市| 聊城市| 凌海市| 广宁县| 大庆市| 商河县| 乌鲁木齐市| 灵寿县| 乌海市| 浦东新区| 潮安县| 沁阳市| 永年县| 绿春县| 鹿泉市| 隆林| 浮山县| 会同县| 城固县| 昌黎县| 开封县| 灌阳县| 永清县| 凤城市| 崇文区| 萨嘎县| 井研县|