LeetCode Hot100(圖論)

200. 島嶼數量

題意

給你一個由?'1'(陸地)和?'0'(水)組成的的二維網格,請你計算網格中島嶼的數量。

島嶼總是被水包圍,并且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。

此外,你可以假設該網格的四條邊均被水包圍。

題解

簡單來看,只要每一個與1上下左右相互連接的就是同一塊陸地,那么我們遍歷整張圖,加入當前點的狀態為1,就是有一塊陸地了,那么把與他相連的全部賦值為0就可以了,也就是沒有價值了

代碼


import java.util.*;public class Solution {public static void main(String[] args) {char arr[][]={{'A','B','C','E'},{'S','F','C','S'},{'A','D','E','E'}};}public int numIslands(char[][] grid) {int sum=0;for(int i=0;i<grid.length;i++){for(int j=0;j<grid[i].length;j++){if(grid[i][j]=='1'){sum++;dfs(grid,i,j);}}}return sum;}static int []zou1={0,0,0,1,-1};static int []zou2={0,-1,1,0,0};public static void dfs(char [][] arr,int x,int y){for(int i=1;i<=4;i++){int x1=zou1[i]+x;int y1=zou2[i]+y;if(x1<0||y1<0||x1>=arr.length||y1>=arr[0].length||arr[x1][y1]=='0'){continue;}arr[x1][y1]='0';dfs(arr,x1,y1);}}}

994. 腐爛的橘子

題意

在給定的?m x n?網格?grid?中,每個單元格可以有以下三個值之一:

  • 值?0?代表空單元格;
  • 值?1?代表新鮮橘子;
  • 值?2?代表腐爛的橘子。

每分鐘,腐爛的橘子?周圍?4 個方向上相鄰?的新鮮橘子都會腐爛。

返回?直到單元格中沒有新鮮橘子為止所必須經過的最小分鐘數。如果不可能,返回?-1?。

題解

我們這題跟上一題實際上差不多,但是當前題需要求的是最小的分鐘數,我們假設當前為3*3,表格為211 111 112 也就是表格邊緣有兩個的話,實際上對于當前而言,我們應當遍歷當前的兩個,將與他相連的都賦值為2,也就是被感染了,然后這就是1次,下一次就變成了221 212 122 ,這一次也是同理,遍歷所有的2,將他相連的1感染即可

代碼


import java.util.*;public class Solution {public static void main(String[] args) {char arr[][]={{'A','B','C','E'},{'S','F','C','S'},{'A','D','E','E'}};}static int []zou1={0,0,0,1,-1};static int []zou2={0,1,-1,0,0};public int orangesRotting(int[][] grid) {Queue<node>dp =new ArrayDeque<>();int sum=0;int ans=0;for(int i=0;i<grid.length;i++){for(int j=0;j<grid[i].length ;j++){if(grid[i][j]==1){sum++;}else if(grid[i][j]==2){dp.add(new node(i,j));}}}if(sum!=0&&dp.isEmpty()){return -1;}if(sum==0){return 0;}while(dp.size()>=1&&sum!=0){ans++;int f=dp.size();while(f>=1){f--;node now=dp.peek();dp.poll();for(int i=1;i<=4;i++){int x= now.x+zou1[i];int y=now.y+zou2[i];if(x<0||y<0||x>=grid.length||y>=grid[x].length||grid[x][y]!=1){continue;}grid[x][y]=2;dp.add(new node(x,y));sum--;}}}if(sum==0){return ans;}else{return -1;}}public  static class node{int x,y;node(int a,int b){x=a;y=b;}}}

207. 課程表

題意

你這個學期必須選修?numCourses?門課程,記為?0?到?numCourses - 1?。

在選修某些課程之前需要一些先修課程。 先修課程按數組?prerequisites?給出,其中?prerequisites[i] = [ai, bi]?,表示如果要學習課程?ai?則?必須?先學習課程??bi?。

  • 例如,先修課程對?[0, 1]?表示:想要學習課程?0?,你需要先完成課程?1?。

請你判斷是否可能完成所有課程的學習?如果可以,返回?true?;否則,返回?false?。

題解

簡單來看,我們將課程視為一張圖,也就是遍歷圖上面有沒有環,這個就比較簡單,每一次找一個節點進行dfs,看看會不會再一次遍歷到當前節點即可

代碼


import java.util.*;public class Solution {public static void main(String[] args) {int  arr[][]={{0,1}};}static List<List<Integer>> ways = new ArrayList<>(3000);static int[]mark =new int[3000];static boolean ans=true;public boolean canFinish(int numCourses, int[][] prerequisites) {ans=true;ways = new ArrayList<>(numCourses+10);mark = new int[numCourses+10];for (int i = 0; i < numCourses; i++) {mark[i]=0;ways.add(new ArrayList<>());}for(int i=0;i<prerequisites.length;i++){ways.get(prerequisites[i][0]).add(prerequisites[i][1]);}for(int i=0;i<numCourses;i++){if(!ans){return ans;}if(mark[i]==0){dfs(i);}}return ans;}static void dfs(int u){if (mark[u] == 1) {ans = false;return;}if (mark[u] == 2) { return;}mark[u] = 1; for (Integer now : ways.get(u)) {dfs(now);}mark[u] = 2; }}

208. 實現 Trie (前綴樹)

題意

你這個學期必須選修?numCourses?門課程,記為?0?到?numCourses - 1?。

在選修某些課程之前需要一些先修課程。 先修課程按數組?prerequisites?給出,其中?prerequisites[i] = [ai, bi]?,表示如果要學習課程?ai?則?必須?先學習課程??bi?。

  • 例如,先修課程對?[0, 1]?表示:想要學習課程?0?,你需要先完成課程?1?。

請你判斷是否可能完成所有課程的學習?如果可以,返回?true?;否則,返回?false?。

題解

簡單寫一個字典樹的題解我們令a=1,b=2等等,畫圖可得

這實際上就是一ke字典樹的抽象模型,令a為根部節點,該圖中就會存在abc,abde,abdd,也就是說,在我們進行插入操作的時候,插入的點與點之間的路徑關系,但是如果有abd,那么怎么跟abde區分呢,實際上我們把結尾的坐標設置一個結束的按鈕即可

代碼

class Trie {boolean check;Trie[]child;public Trie() {check=false;child =new Trie[28];}public void insert(String word) {Trie node=this;char []arr=word.toCharArray();for(int i=0;i<arr.length;i++){char f=arr[i];int x=f-'a'+1;if(node.child[x]==null){node.child[x]=new Trie();}node=node.child[x];}node.check=true;}public boolean search(String word) {Trie node=find(word);if(node==null){return false;}if(node.check==false){return false;}return true;}public boolean startsWith(String prefix) {Trie node=find(prefix);if(node==null){return false;}return true;}public Trie find(String word){Trie node=this;char[]arr=word.toCharArray();for(int i=0;i<arr.length;i++){int f=arr[i]-'a'+1;if(node.child[f]==null){return null;}node=node.child[f];}return node;}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87360.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87360.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87360.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu Gnome 安裝和卸載 WhiteSur-gtk-theme 類 Mac 主題的正確方法

WhiteSur-gtk-theme 是一個流行的 GNOME 桌面主題&#xff0c;可以讓 Ubuntu 的桌面環境看起來像 macOS。以下是安裝和卸載 WhiteSur-gtk-theme 的詳細步驟&#xff0c;包括解釋每個命令的作用。 一、安裝 WhiteSur-gtk-theme 1. 準備工作 在安裝主題之前&#xff0c;建議確…

如何在DataGear 5.4.1 中快速制作SQL服務端分頁的數據表格看板

DataGear 數據可視化分析平臺&#xff08;http://datagear.tech/&#xff09; 在新發布的5.4.1版本中&#xff0c;內置表格圖表新增了serverSidePaging選項&#xff0c;僅需通過簡單的配置&#xff0c;即可為表格添加服務端分頁、關鍵字查詢、排序功能。 本文以SQL數據集作為數…

股指期貨套保比例怎么算?

在金融市場里&#xff0c;套期保值&#xff08;套保&#xff09;是一種常見的風險管理手段&#xff0c;目的是通過期貨市場對沖現貨市場的風險。而套保比例&#xff08;也叫套保比率&#xff09;的計算&#xff0c;是套保操作的核心。簡單來說&#xff0c;套保比例就是“期貨頭…

邏輯回歸(Logistic Regression)算法詳解

文章目錄 一、邏輯回歸&#xff1a;從線性回歸到二分類的跨越1.1 邏輯回歸簡介1.2 Sigmoid函數&#xff1a;概率映射的數學本質1.3 參數 w w w 和 b b b 對Sigmoid的調控1.4 從線性回歸到分類1.5 決策邊界&#xff1a;從概率到類別&#xff08;結合圖3、圖4&#xff09; 二、…

HTTPS通信流程:SSL/TLS握手全解析

2021&#xff0c;2022&#xff0c;2023年1-8月看了很多技術書籍&#xff0c;現在想來忘了很多&#xff0c;用到的也不多&#xff0c;但是因為提前接觸過&#xff0c;所以很多新東西&#xff0c;接受起來&#xff0c;比預想的要容易些。最近突然想要回憶下HTTPS&#xff0c;居然…

SVG 在 VSCode 中的使用與優勢

SVG 在 VSCode 中的使用與優勢 引言 SVG(可縮放矢量圖形)是一種基于可擴展標記語言的圖形圖像格式,與傳統的位圖格式(如 JPEG 或 PNG)相比,SVG 圖像具有更高的靈活性和可縮放性。隨著前端開發領域的不斷發展,SVG 在網頁設計中的應用越來越廣泛。本文將介紹 SVG 在 Vis…

Ubuntu開放mysql 3306端口

Ubuntu開放mysql 3306端口 1. 檢查 UFW 防火墻規則2. 檢查 iptables 規則 1. 檢查 UFW 防火墻規則 sudo ufw status verbose | grep 3306若輸出包含 3306/tcp ALLOW&#xff0c;表示端口已開放(如下) ubuntuUbuntu2404:~$ sudo ufw status verbose | grep 3306 3306/tcp …

CentOS 卸載docker

1、停止docker服務 systemctl stop docker.socket systemctl stop docker systemctl stop containerd 2、列出已安裝的docker包 yum list installed | grep -i docker 輸出如下&#xff1a; containerd.io.x86_64 1.6.33-3.1.el7 docker-ce-stab…

MySQL數據庫----DML語句

目錄 DML-介紹SQL-DML-添加數據SQL-DML-修改數據SQL-DML-刪除數據 DML-介紹 DML英文全稱是 Data Manipulation Language(數據操作語言)&#xff0c;用來對數據庫中表的數據記錄進行增刪改操作。 添加數據&#xff08;INSERT&#xff09; 修改數據&#xff08;UPDATE&#xff…

Prompt:提示詞工程

前言在LLM大放異彩的今天&#xff0c;一個簡單的問題&#xff0c;可能就會引出一個方案&#xff0c;一篇散文&#xff0c;而驅動這一切的&#xff0c;正是輸入的“提示詞&#xff08;Prompt&#xff09;”Prompt工程就是&#xff1a;與大模型打交道時&#xff0c;如何更好地設計…

GSAP 動畫庫在 Vue3 項目中的使用總結

前言 GSAP&#xff08;GreenSock Animation Platform&#xff09;是目前最強大的 JavaScript 動畫庫之一&#xff0c;以其出色的性能和簡潔的API而聞名。本文將基于實際項目經驗&#xff0c;詳細介紹如何在 Vue3 項目中使用 GSAP 創建流暢、專業的動畫效果&#xff0c;包括核心…

【字節跳動】數據挖掘面試題0007:Kmeans原理,何時停止迭代

文章大綱 K-means 原理與迭代停止條件?? 一、K-Means核心思想&#x1f501; 二、迭代步驟詳解關鍵數學操作 ?? 三、何時停止迭代&#xff1f;Kmeans 算法實現代碼 ?? 四、面試常見擴展問題1. K值如何選擇&#xff1f;2. 初始質心影響結果嗎&#xff1f;3. 算法缺陷與改進…

209、長度最小的子數組

題目&#xff1a; 解答&#xff1a; 滑動窗口&#xff0c;左右指針指向窗口兩端&#xff0c;窗口為[left,right]&#xff0c;leftright時窗口只包含一個元素。 窗口內元素和sum>target時&#xff0c;left,推出左側一個元素;sum<target時&#xff0c;right&#xff0c;加…

關機精靈——自動化與便利性

文章目錄 背景目標實現下載 背景 自動化與便利性&#xff1a; 讓電腦在用戶無需值守或干預的情況下&#xff0c;在特定時間點&#xff08;倒計時結束&#xff09;或任務完成后自動關閉。節能與環保&#xff1a; 避免電腦在完成工作后或無人使用時繼續空耗電力。時間管理與健康…

L2CAP協議詳解:分段重組、QoS控制與多協議復用設計(面試寶典)

本文系統解析L2CAP協議的知識圖譜&#xff0c;掌握面試核心考點&#xff0c;并通過真題演練提升實戰能力。建議配合協議分析工具進行抓包實踐&#xff0c;加深對協議機制的理解。 一、L2CAP 在藍牙協議棧中的核心定位 L2CAP&#xff08;Logical Link Control and Adaptation P…

微軟服務器安全問題

微軟云服務器安全深度解析&#xff1a;挑戰、應對與未來展望——構建韌性“安全之盾”的持續博弈&#xff01; 在當今數字化時代&#xff0c;云計算已成為眾多企業和組織運行業務的核心基礎設施和“數字生命線”&#xff0c;而微軟云&#xff08;Azure&#xff09;作為全球領先…

后臺管理系統的誕生 - 利用AI 1天完成整個后臺管理系統的微服務后端+前端

AI創作系列(11)&#xff1a;后臺管理系統的誕生 - 利用AI 1天完成整個后臺管理系統的微服務后端前端 真實記錄&#xff1a;我決定為海貍IM添加一個后臺管理系統。從早上開始&#xff0c;到晚上結束&#xff0c;僅僅1天時間&#xff0c;我就完成了整個后臺管理系統的微服務后端和…

開發自動駕駛系統所需工具

硬件開發平臺 傳感器系統 環境感知工具包括&#xff1a; 激光雷達&#xff1a;通過發射激光脈沖并接收反射光來測量距離&#xff0c;構建點云數據以描繪周圍環境的三維結構。例如&#xff0c;Velodyne的VLP-16激光雷達每秒可發射約30萬次激光脈沖&#xff0c;生成高密度的點…

Node.js特訓專欄-實戰進階:12. 數據庫事務處理與并發控制

?? 歡迎來到 Node.js 實戰專欄!在這里,每一行代碼都是解鎖高性能應用的鑰匙,讓我們一起開啟 Node.js 的奇妙開發之旅! Node.js 特訓專欄主頁 專欄內容規劃詳情 數據庫事務處理與并發控制:原理、實踐與性能優化 一、事務基礎:ACID特性與實現原理 1.1 ACID特性詳解 事…

計算機網絡(五)數據鏈路層 MAC和ARP協議

目錄一、鏈路二、MAC地址三、ARP協議ARP工作流程?&#xff1a;?一、鏈路鏈路&#xff1a;一個結點到相鄰結點的物理線路數據鏈路&#xff1a;在鏈路的基礎上增加一些必要的軟件&#xff08;協議的實現&#xff09;和硬件&#xff08;網絡適配器&#xff09;。網絡中的主機、路…