99国产精品欲av蜜臀,可以直接免费观看的AV网站,gogogo高清免费完整版,啊灬啊灬啊灬免费毛片

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

面試官出車禍了,面試要取消了。

0
分享至

專欄:50多種數(shù)據(jù)結構徹底征服

專欄:50多種經(jīng)典圖論算法全部掌握

一網(wǎng)友發(fā)文稱面試被取消了,原因是面試官在路上出車禍了。不知道是真出車禍,還是已經(jīng)找到合適的人不打算招了。如果是不打算招了,說明HR和面試官的關系很不好,不想招完全可以找個其他借口。我之前也遇到過面試取消的情況,面試的當天HR給出的理由是面試官出差去了,后面再約,結果直到我重新找到工作入職,也沒見她約。

不過也有可能是真的,不能瞎猜,不知道大家在面試中有沒有遇到取消的情況。






--------------下面是今天的算法題--------------

來看下今天的算法題,這題是LeetCode的第827題:最大人工島。

問題描述

來源:LeetCode第827題

難度:困難

給你一個大小為 n x n 二進制矩陣 grid 。最多只能將一格 0 變成 1 。返回執(zhí)行此操作后,grid 中最大的島嶼面積是多少?島嶼由一組上、下、左、右四個方向相連的 1 形成。

示例1:


輸入: grid = [[1, 0], [0, 1]] 輸出: 3 解釋: 將一格0變成1,最終連通兩個小島得到面積為 3 的島嶼。

示例2:


輸入: grid = [[1, 1], [1, 0]] 輸出: 4 解釋: 將一格0變成1,島嶼的面積擴大為 4。

  • n == grid.length

  • n == grid[i].length

  • 1 <= n <= 500

  • grid[i][j] 為 0 或 1

問題分析

這題說的是最多只能將一個 0 變成 1 ,然后求最大的島嶼面積,和我們之前講的 類似。

我們可以按照之前的方式先計算所有島嶼的面積,然后嘗試把 0 變成 1 ,計算最大面積。因為 0 變成的 1 的時候,兩個本來不相連的島嶼可能會相連,島嶼的面積就會增大,如下圖所示。


所以在計算完島嶼面積之后,需要再遍歷一次二維數(shù)組,如果是 0 ,就嘗試把它變成 1 ,然后把它的上下左右 4 個方向有島嶼的連在一起計算面積。

為了連接的時候防止島嶼有重復,我們需要把每個島嶼編上號,如果號碼是一樣的,說明他們是同一個島嶼,不能連接,如下圖所示,紅色 0 的上下位置是同一個島嶼,不能相加。


JAVA:

// 每一個島嶼的區(qū)域標記為一個不同的數(shù)字 public int largestIsland(int[][] grid) {     int length = grid.length;     Map
         
  mp =  new HashMap<>();      int ans =  0; // 保存最大的島嶼      int landNo =  2; // 島嶼編號從 2 開始      for ( int i =  0; i < length; i++) {          for ( int j =  0; j < length; j++) {              if (grid[i][j] ==  1) {                  int area = dfs(grid, i, j, length, landNo);                 mp.put(landNo++, area); // 保存到map中,島嶼編號也要累加                 ans = Math.max(ans, area);             }         }     }     Set  mySet =  new HashSet<>(); // 去掉重復的      for ( int i =  0; i < length; i++) {          for ( int j =  0; j < length; j++) {              // 如果遇到0,嘗試把它的上下左右連接起來,保存最大面積。              if (grid[i][j] ==  0) {                  int up = i >  0 ? grid[i -  1][j] :  0;                  int down = i < length -  1 ? grid[i +  1][j] :  0;                  int left = j >  0 ? grid[i][j -  1] :  0;                  int right = j < length -  1 ? grid[i][j +  1] :  0;                  // 上下左右在連接之前肯定是不能相連的,如果是相連的,只能取一個                 mySet.clear();                 mySet.addAll(Arrays.asList(up, down, left, right));                  int tmp =  0;                  for ( int s : mySet) {                      if (s !=  0)                         tmp += mp.get(s);                 }                 ans = Math.max(ans, tmp +  1);             }         }     }      return ans; } // 通過dfs遍歷當前位置的上下左右四個方向 private int dfs(int[][] grid, int i, int j, int length, int landNo) {      // 越界處理      if (i <  0 || i >= length || j <  0 || j >= length || grid[i][j] !=  1)          return  0;      int res =  1;     grid[i][j] = landNo; // 相連的標記為同一個島嶼     res += dfs(grid, i -  1, j, length, landNo); // 上     res += dfs(grid, i +  1, j, length, landNo); // 下     res += dfs(grid, i, j -  1, length, landNo); // 左     res += dfs(grid, i, j +  1, length, landNo); // 右      return res; }

C++:

public:     int largestIsland(vector

 > &grid) {         int length = grid.size();         unordered_map

  mp;         int ans = 0;// 保存最大的島嶼         // 每一個島嶼的區(qū)域標記為一個不同的數(shù)字         int landNo = 2;// 島嶼編號從 2 開始         for (int i = 0; i < length; i++) {             for (int j = 0; j < length; j++) {                 if (grid[i][j] == 1) {                     int area = dfs(grid, i, j, length, landNo);                     mp[landNo++] = area;// 保存到map中,島嶼編號也要累加                     ans = max(ans, area);                 }             }         }         unordered_set

  mySet;// 去掉重復的         for (int i = 0; i < length; i++) {             for (int j = 0; j < length; j++) {                 // 如果遇到0,嘗試把它的上下左右連接起來,保存最大面積。                 if (grid[i][j] == 0) {                     int up = i > 0 ? grid[i - 1][j] : 0;                     int down = i < length - 1 ? grid[i + 1][j] : 0;                     int left = j > 0 ? grid[i][j - 1] : 0;                     int right = j < length - 1 ? grid[i][j + 1] : 0;                     // 上下左右在連接之前肯定是不能相連的,如果是相連的,只能取一個                     mySet.clear();                     mySet.insert(up);                     mySet.insert(down);                     mySet.insert(left);                     mySet.insert(right);                     int tmp = 0;                     for (int s: mySet) {                         if (s != 0)                             tmp += mp[s];                     }                     ans = max(ans, tmp + 1);                 }             }         }         return ans;     }     // 通過dfs遍歷當前位置的上下左右四個方向     int dfs(vector

 > &grid, int i, int j, int length, int landNo) {         // 越界處理         if (i < 0 || i >= length || j < 0 || j >= length || grid[i][j] != 1)             return 0;         int res = 1;         grid[i][j] = landNo;// 相連的標記為同一個島嶼         res += dfs(grid, i - 1, j, length, landNo);// 上         res += dfs(grid, i + 1, j, length, landNo);// 下         res += dfs(grid, i, j - 1, length, landNo);// 左         res += dfs(grid, i, j + 1, length, landNo);// 右         return res;     }




Python:

def largestIsland(self, grid: List[List[int]]) -> int:     # 通過dfs遍歷當前位置的上下左右四個方向     def dfs(i, j, length, landNo):         # 越界處理         if i < 0 or i >= length or j < 0 or j >= length or grid[i][j] != 1:             return 0         res = 1         grid[i][j] = landNo  # 相連的標記為同一個島嶼         res += dfs(i - 1, j, length, landNo)  # 上         res += dfs(i + 1, j, length, landNo)  # 下         res += dfs(i, j - 1, length, landNo)  # 左         res += dfs(i, j + 1, length, landNo)  # 右         return res     length = len(grid)     mp = {}     ans = 0  # 保存最大的島嶼     landNo = 2  # 島嶼編號從 2 開始     for i in range(length):         for j in range(length):             if grid[i][j] == 1:                 area = dfs(i, j, length, landNo)                 mp[landNo] = area  # 保存到map中,島嶼編號也要累加                 ans = max(ans, area)                 landNo += 1     for i in range(length):         for j in range(length):             # 如果遇到0,嘗試把它的上下左右連接起來,保存最大面積。             if grid[i][j] == 0:                 up = grid[i - 1][j] if i > 0 else 0                 down = grid[i + 1][j] if i < length - 1 else 0                 left = grid[i][j - 1] if j > 0 else 0                 right = grid[i][j + 1] if j < length - 1 else 0                 # 上下左右在連接之前肯定是不能相連的,如果是相連的,只能取一個                 mySet = {up, down, left, right}  # 去掉重復的                 tmp = 0                 for s in mySet:                     if s != 0:                         tmp += mp[s]                 ans = max(ans, tmp + 1)     return ans

筆者簡介

博哥,真名:王一博,畢業(yè)十多年, 作者,專注于 數(shù)據(jù)結構和算法 的講解,在全球30多個算法網(wǎng)站中累計做題2000多道,在公眾號中寫算法題解800多題,對算法題有自己獨特的解題思路和解題技巧,喜歡的可以給個關注,也可以 下載我整理的1000多頁的PDF算法文檔 。

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
鄧超母親節(jié)陪79歲媽媽遛彎,在媽媽身后調(diào)皮比耶母子倆互動太溫馨

鄧超母親節(jié)陪79歲媽媽遛彎,在媽媽身后調(diào)皮比耶母子倆互動太溫馨

逍遙史記
2025-05-11 11:18:50
水豚出逃40天至今未歸,江蘇揚州一動物園發(fā)懸賞公告

水豚出逃40天至今未歸,江蘇揚州一動物園發(fā)懸賞公告

澎湃新聞
2025-05-11 11:20:28
很多上海人突然發(fā)現(xiàn)!手機上這個固定符號變了,代表著什么?

很多上海人突然發(fā)現(xiàn)!手機上這個固定符號變了,代表著什么?

魯中晨報
2025-05-09 15:36:07
全網(wǎng)“圍剿”小米汽車

全網(wǎng)“圍剿”小米汽車

互聯(lián)網(wǎng)思維
2025-05-10 23:35:25
特朗普破防了!中方專機抵莫斯科連談4天,莫迪再騎墻缺席俄閱兵

特朗普破防了!中方專機抵莫斯科連談4天,莫迪再騎墻缺席俄閱兵

boss外傳
2025-05-10 15:05:03
18歲王鈺棟炸裂:高速奔跑神級卸球后驚艷破門,現(xiàn)場視角,太牛了

18歲王鈺棟炸裂:高速奔跑神級卸球后驚艷破門,現(xiàn)場視角,太牛了

側身凌空斬
2025-05-10 20:13:23
特朗普:美中在瑞士達成了許多共識,取得了巨大進展

特朗普:美中在瑞士達成了許多共識,取得了巨大進展

金石隨筆
2025-05-11 08:29:16
35歲出軌男人的心里話:和小三上過床以后,再抱老婆睡覺是什么感覺

35歲出軌男人的心里話:和小三上過床以后,再抱老婆睡覺是什么感覺

第四思維
2025-05-09 18:05:14
再爆大冷!0-2、1-6慘敗:世界第3也輸了,又一16強,再見富家女

再爆大冷!0-2、1-6慘敗:世界第3也輸了,又一16強,再見富家女

楊哥歷史
2025-05-11 10:26:42
男子退租忘記帶走女朋友,男房東笑得合不攏嘴:二手也能賣1000元

男子退租忘記帶走女朋友,男房東笑得合不攏嘴:二手也能賣1000元

唐小糖說情感
2025-05-10 10:51:58
蘋果渠道降價 iPhone 16 Pro疊加國補后到手價5499元起

蘋果渠道降價 iPhone 16 Pro疊加國補后到手價5499元起

TechWeb
2025-05-11 12:01:22
福建8歲男童爬山失蹤一周 搜救范圍還在進一步擴大

福建8歲男童爬山失蹤一周 搜救范圍還在進一步擴大

大象新聞
2025-05-11 14:11:17
淚流滿面的發(fā)帖!爺爺每多活一天,就能為家里帶來566元的收入…

淚流滿面的發(fā)帖!爺爺每多活一天,就能為家里帶來566元的收入…

火山詩話
2025-05-09 14:23:17
S媽撒謊實錘!葛斯齊曬馬筱梅S媽聊天記錄,馬筱梅親切喊她徐媽媽

S媽撒謊實錘!葛斯齊曬馬筱梅S媽聊天記錄,馬筱梅親切喊她徐媽媽

南南說娛
2025-05-11 09:50:41
CBA總決賽G3戰(zhàn)還沒打!廣廈已提前開售G5戰(zhàn)門票:回主場奪冠嗎?

CBA總決賽G3戰(zhàn)還沒打!廣廈已提前開售G5戰(zhàn)門票:回主場奪冠嗎?

籃球快餐車
2025-05-11 04:20:13
印度撿到PL15E完整彈體,有能力仿制嗎?

印度撿到PL15E完整彈體,有能力仿制嗎?

三叔的裝備空間
2025-05-09 21:19:27
美論壇:如果美國立馬停止與中國合作,中國經(jīng)濟會不會因此崩潰?

美論壇:如果美國立馬停止與中國合作,中國經(jīng)濟會不會因此崩潰?

夢史
2025-05-10 14:37:26
在舊社會被當做“肉屏風”的家妓,吃老人痰,泡陰棗,比娼妓還慘

在舊社會被當做“肉屏風”的家妓,吃老人痰,泡陰棗,比娼妓還慘

午夜故事會
2025-05-08 11:52:29
“三天是男人的極限”,女孩謊稱提前開學去見男友,網(wǎng)友直接舉報

“三天是男人的極限”,女孩謊稱提前開學去見男友,網(wǎng)友直接舉報

妍妍教育日記
2025-02-09 22:58:40
隆指導即將上線!隆多正式從肯塔基大學畢業(yè),已獲得執(zhí)教大學球隊資格

隆指導即將上線!隆多正式從肯塔基大學畢業(yè),已獲得執(zhí)教大學球隊資格

雷速體育
2025-05-11 07:57:15
2025-05-11 15:47:00
數(shù)據(jù)結構和算法
數(shù)據(jù)結構和算法
專門介紹和寫算法題解的號
227文章數(shù) 2關注度
往期回顧 全部

頭條要聞

伊官員:美在間接談判中不真誠 正在為談判失敗做準備

頭條要聞

伊官員:美在間接談判中不真誠 正在為談判失敗做準備

體育要聞

分手7年之后,漢堡終于原諒了德甲

娛樂要聞

S媽撒謊實錘!馬筱梅親切喊她徐媽媽

財經(jīng)要聞

重慶一家人把755億巨債留給了股民

科技要聞

首款折疊屏iPhone,有新消息!

汽車要聞

空間表現(xiàn)是優(yōu)勢 極狐T1將于5月底正式亮相發(fā)布

態(tài)度原創(chuàng)

手機
數(shù)碼
旅游
本地
公開課

手機要聞

REDMI Turbo 4 Pro奪冠,華為nova 13第二,iPhone 16僅第五

數(shù)碼要聞

華為鴻蒙電腦通過星閃認證,型號為“HAD-W32”

旅游要聞

熱聞|清明假期將至,熱門目的地有哪些?

本地新聞

非遺里的河南|汴梁鳶舞千年韻!宋室風箏藏多少絕活

公開課

李玫瑾:為什么性格比能力更重要?

無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 兴宁市| 通化县| 曲阜市| 鹤山市| 吉林市| 敦化市| 贵港市| 朔州市| 南岸区| 龙胜| 潜山县| 陆河县| 上犹县| 宝丰县| 株洲市| 渝中区| 方正县| 青浦区| 尚志市| 井陉县| 达日县| 日喀则市| 阜康市| 普兰店市| 同心县| 东乡县| 黔西| 高邑县| 汉阴县| 康乐县| 巴彦淖尔市| 开封县| 耒阳市| 景宁| 垫江县| 宜川县| 建德市| 龙海市| 应城市| 溆浦县| 来凤县|