面試高頻題 力扣 417. 太平洋大西洋水流問題 洪水灌溉(FloodFill) 深度優先遍歷(dfs) 暴力搜索 C++解題思路 每日一題

目錄

  • 零、題目描述:用人話再講一遍
  • 一、為什么這道題值得咱們學習?
  • 二、思路探索
    • 常規思路:逐個檢查每個格子(會超時!??)
  • 三、正難則反:反向思維的巧妙應用 🔄
  • (思考時間!)💡
  • 四、代碼實現:一步步拆解
    • 代碼拆解:
    • 時間復雜度分析
    • 空間復雜度分析
  • 六、坑點總結 & 舉一反三 🚀

嗨,各位算法愛好者!今天咱們來討論一道有點繞但超經典的題目—— LeetCode 417. 太平洋大西洋水流問題。這道題堪稱“洪水灌溉”系列的進階版,學好它,能讓你的逆向思維能力上個大臺階!

零、題目描述:用人話再講一遍

在這里插入圖片描述

這道題力扣上面的題目表述太難評了,本來挺簡單的一道題讓力扣的描述說的好像一道外星題,我就不過多說明力扣的題目描述,用我自己的話來向大家解釋下這道題:

題目核心
給你一個 m x n 的網格(可以想象成一個島嶼的地形圖)

  • 每個坐標都有自己的高度值 🏔?
  • 島嶼的上邊界左邊界挨著 太平洋 🌊
  • 島嶼的下邊界右邊界挨著 大西洋 🌊
  • 水往低處流或者平流(即水可以向<=自己高度值的坐標里流動
  • 這道題要我們返回的就是既能流到太平洋,又能流到大西洋的格子坐標。

舉個栗子 🌰:
如果一個格子的水,既能一路向左/向上流到太平洋,又能一路向右/向下流到大西洋,那它就是我們要找的目標!

我們用示例1來說明:👇

在這里插入圖片描述輸入: heights = [[1,2,2,3,5],[3,2,3,4,4],[2,4,5,3,1],[6,7,1,4,5],[5,1,1,2,4]]
輸出: [[0,4],[1,3],[1,4],[2,2],[3,0],[3,1],[4,0]]

以坐標 [2,2](第三行第三列,高度 5 )為例,快速模擬驗證邏輯:

我們來以 [2,2]也就就是圖中最中間的5這個坐標模擬流水

先是流向太平洋
[2,2] (5)[1,2] (3)(上,3≤5)→ [0,2] (2)(上,2≤3)→ 觸達第 0 行(太平洋邊界)

之后是流大西洋
[2,2] (5)[3,2] (1)(下,1≤5)→ [4,2] (1)(下,1≤1)→ 觸達第 4 行(大西洋邊界)

這些黃色格子要么本身就在海洋邊界(直接滿足流向對應海洋),要么能通過 “向更低 / 等高單元格流動” 的規則,連通到太平洋或大西洋的邊界 。通過這樣的水流邏輯,它們被判定為 “既能流向太平洋,又能流向大西洋”,所以出現在最終結果里。你可以結合網格圖,順著水流方向模擬一遍,就能更直觀理解啦~

一、為什么這道題值得咱們學習?

這道題簡直是逆向思維的絕佳教材!它的精髓在于:

  • 打破“從起點找終點”的固定思維,學會“正難則反”(當正面求解復雜時,試試反過來想)
  • 進一步鞏固洪水灌溉(Flood Fill) 算法的應用
  • 訓練二維網格中“區域標記”與“交集計算”的能力

💡 悄悄說:這道題和咱們專欄中的第一篇博客力扣 200.島嶼數量是遞進關系哦!如果還沒看過建議先去看一看那一篇博客,講了DFS的基礎實現,我們專欄中的上一篇博客力扣 130. 被圍繞的區域則鋪墊了“正難則反”的思路,循序漸進效果更佳~感興趣的朋友可以訂閱我的專欄每日一題,我會每天發一篇關于算法練習的博客哦,專欄中的博客也都是有著層層遞進的聯系的~

二、思路探索

常規思路:逐個檢查每個格子(會超時!??)

最直觀的想法:遍歷每個格子,分別判斷它能否流到太平洋和大西洋。

步驟:

  1. 對每個格子 (i,j),調用 canFlowToPacific(i,j)canFlowToAtlantic(i,j)
  2. 兩個函數都返回 true 時,加入結果集

實現草圖

// 檢查(i,j)能否流到太平洋
bool canFlowToPacific(int i, int j, vector<vector<int>>& heights) {if (i == 0 || j == 0) return true; // 已到達太平洋邊界for (四個方向) {int ni = i + dx[k], nj = j + dy[k];if ( heights[ni][nj] <= heights[i][j] ) { // 能往低處流if (canFlowToPacific(ni, nj, heights)) return true;}}return false;
}
// 大西洋同理...

為什么會超時?

  • 每個格子可能被重復檢查多次,時間復雜度高達 O((m*n)^2)
  • 對于 300x300 的網格,運算量會達到驚人的 8100 萬2,直接爆掉!

結果也是如此,我已經替大家試過了/(ㄒoㄒ)/~~
在這里插入圖片描述
所以說我們要換一個思路👇

三、正難則反:反向思維的巧妙應用 🔄

既然從格子往海洋流不好算,那咱們反過來想:從海洋往陸地“爬”

核心邏輯:

  1. 太平洋的范圍:從所有能直接流入太平洋的邊界(上邊界 i=0、左邊界 j=0)出發,標記所有能逆流到達的格子(即這些格子的水可以流到太平洋)。
  2. 大西洋的范圍:從所有能直接流入大西洋的邊界(下邊界 i=rows-1、右邊界 j=cols-1)出發,標記所有能逆流到達的格子(即這些格子的水可以流到大西洋)。
  3. 結果:要是我們遍歷完這兩個范圍那么兩個范圍的重疊區域,就是既能流到太平洋又能流到大西洋的格子!

生動比喻 🌊??🏔?:
想象太平洋和大西洋的水在漲潮,水可以往高處漫(和自然規律相反,這里是“逆水行舟”)。最終,被兩邊的水都淹沒的地方,就是我們要找的答案~

步驟拆解:

  • 第一步:用 Pmark 數組標記太平洋能“淹到”的格子
    • (0,j)(上邊界)和 (i,0)(左邊界)開始DFS
    • 只有當相鄰格子更高或等高時,水才能漫過去
  • 第二步:用 Amark 數組標記大西洋能“淹到”的格子
    • (rows-1,j)(下邊界)和 (i,cols-1)(右邊界)開始DFS
  • 第三步:遍歷所有格子,同時被 PmarkAmark 標記的就是結果

(思考時間!)💡

理解了“正難則反”的思路后,不妨先自己動手試試寫代碼?

  • 如何初始化兩個標記數組?
  • DFS的遞歸條件應該怎么寫?
  • 如何高效求兩個標記數組的交集?

先嘗試獨立實現,再看下面的代碼解析,收獲會更大哦~

四、代碼實現:一步步拆解

class Solution {
public:// 方向數組:上下左右(順序不影響,覆蓋四個方向即可)int dx[4] = {1, -1, 0, 0};int dy[4] = {0, 0, 1, -1};int rows, cols; // 網格的行數和列數vector<vector<int>> result; // 存儲最終結果vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {// 邊界檢查:空網格直接返回if (heights.empty() || heights[0].empty()) return result;rows = heights.size();cols = heights[0].size();// 初始化標記數組:記錄能流到兩個海洋的格子vector<vector<bool>> Pmark(rows, vector<bool>(cols, false)); // 太平洋vector<vector<bool>> Amark(rows, vector<bool>(cols, false)); // 大西洋// 1. 標記太平洋的范圍// 左邊界(j=0)的所有格子for(int i = 0; i < rows; i++) {dfs(i, 0, heights, Pmark);}// 上邊界(i=0)的所有格子(注意:(0,0)已經被左邊界處理過,這里會重復調用但不影響)for(int j = 0; j < cols; j++) {dfs(0, j, heights, Pmark);}// 2. 標記大西洋的范圍// 右邊界(j=cols-1)的所有格子for(int i = 0; i < rows; i++) {dfs(i, cols-1, heights, Amark);}// 下邊界(i=rows-1)的所有格子for(int j = 0; j < cols; j++) {dfs(rows-1, j, heights, Amark);}// 3. 找兩個范圍的交集for(int i = 0; i < rows; i++) {for(int j = 0; j < cols; j++) {if(Pmark[i][j] && Amark[i][j]) {result.push_back({i, j});}}}return result;}// DFS函數:從(x,y)出發,標記所有能被當前海洋"淹沒"的格子void dfs(int x, int y, vector<vector<int>>& heights, vector<vector<bool>>& mark) {// 1. 如果已經標記過,直接返回(避免重復遞歸)if (mark[x][y]) return;// 2. 標記當前格子為可到達mark[x][y] = true;// 3. 遍歷四個方向,檢查能否逆流而上(往高處漫)for(int i = 0; i < 4; i++) {int nx = x + dx[i]; // 新行坐標int ny = y + dy[i]; // 新列坐標// 邊界檢查:新坐標必須在網格內if(nx >= 0 && ny >= 0 && nx < rows && ny < cols) {// 核心條件:相鄰格子比當前高或相等,且未被標記if (!mark[nx][ny] && heights[nx][ny] >= heights[x][y]) {dfs(nx, ny, heights, mark);}}}}
};

代碼細節解釋:

  1. 方向數組dxdy 定義了上下左右四個方向,避免手寫四次重復代碼。

  2. 標記數組

    • Pmark[i][j] = true 表示 (i,j) 的水可以流到太平洋
    • Amark[i][j] = true 表示 (i,j) 的水可以流到大西洋
  3. DFS 觸發時機

    • 太平洋從 上邊界(i=0)左邊界(j=0) 開始
    • 大西洋從 下邊界(i=rows-1)右邊界(j=cols-1) 開始
    • 重復觸發(如 (0,0) 被兩個邊界觸發)不影響,因為 mark[x][y] 會過濾重復
  4. DFS 核心邏輯

    • 先標記當前格子為“可到達”
    • 對四個方向的鄰居,只有當 鄰居更高或等高未被標記 時,才遞歸深入
    • 這模擬了“水往高處漫”的逆向過程
  5. 結果收集:兩個標記數組都為 true 的格子,就是既能流到太平洋又能流到大西洋的目標。

代碼拆解:

1. 類中成員變量解析

class Solution {
public:// 方向數組:上下左右四個方向的坐標偏移,避免重復寫坐標計算int dx[4] = {1, -1, 0, 0};  int dy[4] = {0, 0, 1, -1};  int rows, cols;  // 存儲網格的行數、列數,dfs 中直接復用vector<vector<int>> result;  // 最終結果:同時流向兩大洋的坐標
};

作用

  • 把重復用的變量(方向、網格尺寸)設為類成員,減少函數傳參,讓代碼更簡潔。
  • result 集中存結果,避免分散處理。

2. 主函數核心邏輯

vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {// 邊界防護:空網格直接返回if (heights.empty() || heights[0].empty()) return result;  rows = heights.size();  cols = heights[0].size();  // 標記數組:記錄能流向太平洋、大西洋的格子vector<vector<bool>> Pmark(rows, vector<bool>(cols, false));  vector<vector<bool>> Amark(rows, vector<bool>(cols, false));  // 1. 從太平洋邊界啟動 DFS(上邊界 + 左邊界)for (int i = 0; i < rows; i++) dfs(i, 0, heights, Pmark);   // 左邊界for (int j = 0; j < cols; j++) dfs(0, j, heights, Pmark);   // 上邊界  // 2. 從大西洋邊界啟動 DFS(下邊界 + 右邊界)for (int i = 0; i < rows; i++) dfs(i, cols-1, heights, Amark); // 右邊界for (int j = 0; j < cols; j++) dfs(rows-1, j, heights, Amark); // 下邊界  // 3. 找交集:同時被兩個海洋標記的格子for (int i = 0; i < rows; i++) {for (int j = 0; j < cols; j++) {if (Pmark[i][j] && Amark[i][j]) {result.push_back({i, j});  }}}return result;
}

核心步驟

  • 邊界防護:先判空,避免后續越界訪問。
  • 標記數組Pmark 記能流太平洋的格子,Amark 記能流大西洋的格子。
  • 逆向 DFS:從海洋邊界(太平洋上/左、大西洋下/右)往陸地 “逆流”,標記所有能連通的格子。
  • 找交集:同時被 PmarkAmark 標記的格子,就是答案。

3. DFS 函數核心邏輯

void dfs(int x, int y, vector<vector<int>>& heights, vector<vector<bool>>& mark) {// 已標記過就跳過,避免重復遞歸if (mark[x][y]) return;  mark[x][y] = true;  // 標記當前格子為“可流向對應海洋”// 遍歷四個方向for (int i = 0; i < 4; i++) {  int nx = x + dx[i];  // 新行坐標int ny = y + dy[i];  // 新列坐標// 檢查:新坐標合法 + 未標記 + 高度 >= 當前(逆流條件)if (nx >= 0 && ny >= 0 && nx < rows && ny < cols && !mark[nx][ny] && heights[nx][ny] >= heights[x][y]) {dfs(nx, ny, heights, mark);  // 遞歸標記相鄰格子}}
}

核心設計

  • 標記優先:進入 DFS 先標記當前格子,避免重復處理。
  • 逆流邏輯:只有相鄰格子高度 >= 當前(模擬 “水往高處漫”),才遞歸(和自然水流相反,是逆向思維關鍵)。
  • 邊界檢查nxny 要在網格內,否則跳過。

4. 局部遞歸示例(以太平洋左邊界 (0,0) 為例)
假設網格如下(簡化示意,僅看關鍵流程):

heights = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]

觸發 dfs(0, 0, heights, Pmark)(太平洋左邊界起點),遞歸過程:

  1. 第一步dfs(0,0)

    • 標記 Pmark[0][0] = true
    • 檢查四個方向:
      • 下(dx[0]=1):nx=1, ny=0 → 高度 4 >= 1 → 遞歸 dfs(1,0)
      • 上、左:越界或已處理,跳過
      • 右:需等待 dfs(1,0) 及其所有遞歸分支執行完畢并回溯后,才會處理 (0,1)。
  2. 第二步dfs(1,0)

    • 標記 Pmark[1][0] = true
    • 檢查四個方向:
      • 下(nx=2, ny=0):高度 7 >= 4 → 遞歸 dfs(2,0)
      • 上(nx=0, ny=0):已標記,跳過
      • 右(nx=1, ny=1):高度 5 >= 4 → 遞歸 dfs(1,1)
      • 左:越界,跳過
  3. 第三步dfs(2,0)dfs(1,1) 繼續擴散…

    • 最終,所有能從 (0,0) 逆流到達的格子都會被標記為 Pmark = true,模擬 “太平洋的水往陸地漫” 的過程。

遞歸特點:像 “逆向洪水”,從海洋邊界出發,逐步標記所有能連通的陸地,直到無法再逆流為止。

總結
代碼通過 逆向 DFS(從海洋往陸地流) + 雙標記數組(太平洋/大西洋) + 交集篩選,高效解決了 “判斷水流雙向連通” 的問題。類成員變量簡化了傳參,DFS 遞歸實現了 “逆流標記”,主函數通過邊界遍歷 + 交集計算,最終得到結果。

結合示例模擬遞歸流程,能更直觀理解 “逆向思維 + 洪水灌溉” 的巧妙用法~

時間復雜度分析

  • 核心邏輯:算法通過兩次獨立的 DFS 遍歷(分別對應太平洋和大西洋)標記所有可達格子,最終計算交集。
  • 具體計算
    • 網格共有 m*n 個格子(m 為行數,n 為列數)。
    • 每個格子最多被 2 次 DFS 訪問(太平洋遍歷一次,大西洋遍歷一次)。
    • 每次 DFS 中,每個格子的處理(檢查方向、標記)是常數時間 O(1)
  • 結論:總時間復雜度為 O(m*n),與網格規模線性相關,效率高效。

空間復雜度分析

  • 核心消耗:主要來自兩部分——遞歸調用棧和標記數組。
  • 具體計算
    • 標記數組PmarkAmark 各占用 m*n 空間,合計 O(m*n)
    • 遞歸棧:最壞情況下(如網格是遞增序列,DFS 需遍歷所有格子),遞歸深度可達 m*n(例如從邊界一直遞歸到對角),占用 O(m*n) 空間。
  • 結論:總空間復雜度為 O(m*n),由標記數組和遞歸棧共同決定。

對比之前的思路,效率提升了不止一個量級!這就是逆向思維的魅力~

六、坑點總結 & 舉一反三 🚀

  1. 邊界條件:DFS 時要嚴格檢查 nxny 是否在網格內,否則會數組越界。
  2. 遞歸終止if (mark[x][y]) return 是關鍵,避免重復遞歸導致棧溢出。
  3. 逆流條件:必須是 heights[nx][ny] >= heights[x][y],漏了“等于”會出錯。

掌握這一系列,你對“洪水灌溉”和“DFS 標記”的理解會突飛猛進!

明天咱們要講的題是力扣 529.掃雷游戲感興趣的朋友可以提前去看一看

最后歡迎大家在評論區分享你的代碼或思路,咱們一起交流探討~ 🌟 要是有大佬有更精妙的思路或想法,懇請在評論區多多指點批評,我一定會虛心學習,并且第一時間回復交流噠!
在這里插入圖片描述
這是封面原圖~ 喜歡的話先點個贊鼓勵一下唄~ 再順手關注一波,后續更新不迷路,保證讓你看得過癮!😉

在這里插入圖片描述

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

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

相關文章

博物館智慧導覽系統AR交互與自動感應技術:從虛實融合到智能講解的技術實踐

本文面向博物館信息化開發者、智慧場館系統技術建設師及AR 設計工程師,從AR 交互與自動感應技術的邏輯出發,拆解AR虛實融合技術與智能講解自動感應技術的原理&#xff0c;為相關開發者實踐提供可復用的技術路徑。如需獲取博物館智慧導覽系統解決方案請前往文章最下方獲取&#…

高效編程革命:DeepSeek V3多語言支持與性能優化實戰

文章目錄 如何利用DeepSeek V3編寫高效程序代碼:從原理到實踐 引言 一、DeepSeek V3核心能力解析 1.1 模型架構與優勢 1.2 與傳統編程輔助工具對比 二、高效代碼編寫實踐指南 2.1 精準提示工程(Prompt Engineering) 基礎提示模板 高級提示技巧 2.2 生產級代碼生成案例 示例:…

OkHttp 與 JSON 解析庫完美結合:Moshi/Jackson/Gson 實戰指南

前言在現代 Android 開發中&#xff0c;網絡請求與 JSON 數據處理是密不可分的。OkHttp 作為強大的 HTTP 客戶端&#xff0c;與 JSON 解析庫&#xff08;Moshi/Jackson/Gson&#xff09;的結合使用&#xff0c;可以極大簡化網絡請求與數據解析的流程。本文將詳細介紹如何將 OkH…

An error occurred at line: 1 in the generated java file問題處理及tomcat指定對應的jdk運行

一、背景 tomcat7啟動后&#xff0c;加載jsp頁面報錯&#xff0c;提示無法將jsp編譯為class文件&#xff0c;主要報錯信息如下&#xff1a; An error occurred at line: 1 in the generated java file 最后確認該錯誤原因為&#xff1a;tomcat7不支持jdk1.8版本 機器上已配…

深入剖析大模型在文本生成式 AI 產品架構中的核心地位

一、大模型的崛起與概念解析 在人工智能技術飛速迭代的當下&#xff0c;大模型已成為驅動行業發展的核心引擎。從技術定義來看&#xff0c;大模型&#xff08;Large Model&#xff09; 是指基于深度學習架構、具備海量參數規模&#xff08;通常數十億至數萬億級別&#xff09;&…

Vue Scoped樣式:當動態元素成為“無家可歸“的孤兒

引言&#xff1a;一場CSS的"身份危機"想象一下&#xff1a;你精心設計了一個Vue組件&#xff0c;為每個元素添加了漂亮的樣式。你滿意地添加了scoped屬性&#xff0c;確保樣式不會"越獄"影響其他組件。然后你動態添加了一些新元素&#xff0c;卻發現它們完…

vmware分配了ubuntu空間但是ubuntu沒有獲取

一開始我看vmware中的ubuntu磁盤空間只有200g不夠用&#xff0c;我在vmware給Ubuntu分了300G的磁盤空間&#xff0c;但是ubuntu還是只有之前的200g 如圖在ubuntu查看后來發現&#xff0c;在磁盤軟件里面需要自己分配磁盤空間大小拓展后就可以了

[MarkdownGithub] 使用塊引用高亮顯示“注意“和“警告“和其他注意方式的選項

參考來源: https://github.com/orgs/community/discussions/16925 Alerts are an extension of Markdown used to emphasize critical information. On GitHub, they are displayed with distinctive colors and icons to indicate the importance of the content. 提示框是 Ma…

mac測試ollama llamaindex

LlamaIndexs 將大語言模型和外部數據連接在一起的工具。大模型prompt有一個長度限制&#xff0c;當外部知識的內容超過這個長度&#xff0c;無法同時將有效信息傳遞給大模型&#xff0c;因此就誕生了 LlamaIndex。 具體操作就是通過多輪對話的方式不斷提純外部數據&#xff0c…

數據結構:字符串:大小寫轉換(changing case of a string)

目錄 第一性問題&#xff1a;什么是“大小寫”&#xff1f; 逐步構造代碼&#xff1a;全部轉為大寫 我們現在用 第一性原理 的方式&#xff0c;從字符串與字符的本質出發&#xff0c;一步步推導出如何在 C 語言中將字符串中的字母變成全部大寫或全部小寫。 第一性問題&…

閑庭信步使用圖像驗證平臺加速FPGA的開發:第三十二課——車牌識別的FPGA實現(4)車牌字符的分割定位

&#xff08;本系列只需要modelsim即可完成數字圖像的處理&#xff0c;每個工程都搭建了全自動化的仿真環境&#xff0c;只需要雙擊top_tb.bat文件就可以完成整個的仿真&#xff0c;大大降低了初學者的門檻&#xff01;&#xff01;&#xff01;&#xff01;如需要該系列的工程…

03_java_運行機制

1. java執行流程2. 什么是編譯3. 什么是運行

鴻蒙卡片開發保姆級教程

卡片 1. 卡片概念 什么是卡片&#xff1f;卡片用來顯示或者提示一些基本信息或者進行一些基本操作。注意不能做重邏輯&#xff0c;所有重要邏輯全部交給應用如果是元服務如何喚醒&#xff1f;因為元服務不提供桌面應用圖標&#xff0c;我們可以通過用戶手動的方式在桌面上添加一…

反向傳播及優化器

反向傳播&#xff08;Backpropagation&#xff09;反向傳播是計算梯度的算法&#xff0c;核心作用是高效求解 “損失函數對模型所有參數的偏導數”&#xff08;即梯度&#xff09;。沒有反向傳播&#xff0c;深度學習的大規模訓練幾乎不可能實現。 整個過程像 “從終點回溯到起…

【機器學習深度學習】生成式模型的評估與驗證

目錄 前言 1. 主觀評估&#xff1a;以人為本的質量判斷 1.1 什么是主觀評估&#xff1f; 1.2 主觀評估的核心流程 1.3 主觀評估的優缺點 2. 客觀評估&#xff1a;量化的性能衡量 2.1 什么是客觀評估&#xff1f; 2.2 常見的客觀評估指標 文本生成 圖像生成 多模態生…

Linux文件——Ext2文件系統(3)_軟硬鏈接

文章目錄文件的軟硬鏈接軟鏈接硬鏈接軟硬鏈接對比軟硬鏈接應用軟硬鏈接注意事項總結文件的軟硬鏈接 本篇文章將重點講解文件系統中的一個重要的知識點&#xff1a; 即文件的軟硬鏈接。 軟鏈接 對于軟鏈接的講解&#xff0c;我們先來使用一個指令看看效果&#xff1a;ln -s 被…

Java SE:類與對象的認識

Java中的類與對象&#xff1a;構建程序世界的基石 在Java編程的世界里&#xff0c;類與對象是面向對象編程&#xff08;OOP&#xff09;的核心概念&#xff0c;它們就像構建大廈的磚瓦&#xff0c;支撐起整個程序的結構。理解類與對象&#xff0c;是掌握Java編程的關鍵一步。 類…

Hexo - 免費搭建個人博客03 - 將個人博客托管到github,個人博客公開給大家訪問

導言我的博客&#xff1a;https://q164129345.github.io/ 既然要將個人博客托管到github&#xff0c;首先我們肯定要有一個github賬戶。另外也需要在電腦上安裝另外一個著名的代碼管理工具git。 一、創建github倉庫二、在Hexo設置部署的內容# Deployment## Docs: https://hexo.…

一次Oracle集群腦裂問題分析處理

問題描述 填寫問題的基礎信息。 系統名稱 數據庫集群 IP地址 xxxxxx 操作系統 Linux 數據庫 Oracle 11.2.0.4 癥狀表現 問題的癥狀表現如下 4月26號晚22點02分左右&#xff0c;HIS集群發生腦裂&#xff0c;十幾分鐘后&#xff08;22.18&#xff09;一節點集群率先獲…

0基礎法考隨手筆記 02(刑訴法專題04 辯護與代理)

0基礎法考隨手筆記 02&#xff08;刑訴法專題04 辯護與代理&#xff09; 1.值班律師相關權力義務2. 3. 4.什么是強制醫療 注意&#xff1a;為強制醫療指派的律師&#xff0c;是訴訟代理人&#xff0c;不是辯護人&#xff0c;因為此人不會被追究刑事責任。 “強制醫療” 是刑事訴…