day62—DFS—太平洋大西洋水流問題(LeetCode-417)

題目描述

有一個?m × n?的矩形島嶼,與?太平洋?和?大西洋?相鄰。?“太平洋”?處于大陸的左邊界和上邊界,而?“大西洋”?處于大陸的右邊界和下邊界。

這個島被分割成一個由若干方形單元格組成的網格。給定一個?m x n?的整數矩陣?heights?,?heights[r][c]?表示坐標?(r, c)?上單元格?高于海平面的高度?。

島上雨水較多,如果相鄰單元格的高度?小于或等于?當前單元格的高度,雨水可以直接向北、南、東、西流向相鄰單元格。水可以從海洋附近的任何單元格流入海洋。

返回網格坐標?result?的?2D 列表?,其中?result[i] = [ri, ci]?表示雨水從單元格?(ri, ci)?流動?既可流向太平洋也可流向大西洋?。

示例 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:

輸入: heights = [[2,1],[1,2]]
輸出: [[0,0],[0,1],[1,0],[1,1]]

提示:

  • m == heights.length
  • n == heights[r].length
  • 1 <= m, n <= 200
  • 0 <= heights[r][c] <= 105

解決方案:

1、分析問題求解:水從一定高度可以流向上(左)和下(右)兩種邊界低處,其高度不一定是最高

2、兩種情況分別討論:從上或左 || 從下或右

3、逆向思維:從低處到高處,正向遍歷,解集合:兩種情況的高度都有重合即是答案

函數源碼:

class Solution {
public:vector<int> direction{-1,0,1,0,-1};void dfs(vector<vector<int>>& heights,vector<vector<bool>>&reach,int row,int col){if(reach[row][col])     return;//結束條件:reach[row][col]=true;int x,y;for(int i=0;i<4;i++){x=row+direction[i],y=col+direction[i+1];//轉化為上下左右四格的位置if( x>=0 && x<heights.size() && y>=0 && y<heights[0].size() &&heights[row][col]<=heights[x][y]){dfs(heights,reach,x,y);//row=x;col=y;更新位置}}}vector<vector<int>> pacificAtlantic(vector<vector<int>>& heights) {if(heights.empty()||heights[0].empty())     return {};vector<vector<int>> ans;int row=heights.size();int col=heights[0].size();vector<vector<bool>> p(row,vector<bool>(col,false)); vector<vector<bool>> a(row,vector<bool>(col,false));for(int i=0;i<row;i++){//左邊界,右邊界dfs(heights,p,i,0);dfs(heights,a,i,col-1);}for(int i=0;i<col;i++){//上邊界,下邊界dfs(heights,p,0,i);dfs(heights,a,row-1,i);}for(int i=0;i<row;i++){for(int j=0;j<col;j++){if(p[i][j]&&a[i][j]){ans.push_back(vector<int>{i,j});}}}return ans;}
};

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

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

相關文章

Langchaine4j 流式輸出 (6)

Langchaine4j 流式輸出 大模型的流式輸出是指大模型在生成文本或其他類型的數據時&#xff0c;不是等到整個生成過程完成后再一次性 返回所有內容&#xff0c;而是生成一部分就立即發送一部分給用戶或下游系統&#xff0c;以逐步、逐塊的方式返回結果。 這樣&#xff0c;用戶…

自動駕駛與智能交通:構建未來出行的智能引擎

隨著人工智能、物聯網、5G和大數據等前沿技術的發展&#xff0c;自動駕駛汽車和智能交通系統正以前所未有的速度改變人類的出行方式。這一變革不僅是技術的融合創新&#xff0c;更是推動城市可持續發展的關鍵支撐。 一、自動駕駛與智能交通的定義 1. 自動駕駛&#xff08;Auto…

數據基座覺醒!大數據+AI如何重構企業智能決策金字塔(下)

1. 數據架構的量子躍遷 1.1 從線性堆疊到立體網絡 傳統六層架構正在經歷基因重組。某智能家居企業將數據流轉路徑重構為三維拓撲網絡后&#xff0c;新品研發周期從18個月壓縮至9個月。這個改造的核心在于打破數據層間的物理隔離&#xff0c;讓原始數據流能直接觸達決策中樞。…

Linux 腳本文件編輯(vim)

1. 用戶級配置文件&#xff08;~/.bashrc&#xff09; vim ~/.bashrc # 編輯 source ~/.bashrc # 讓編輯生效 ~/.bashrc 文件是 Bash Shell 的配置文件&#xff0c;用于定義用戶登錄時的環境變量、別名、函數等設置。當你修改了 ~/.bashrc 文件后&#xff0c;通常需要重新…

【Pytorch學習筆記】模型模塊06——hook函數

hook函數 什么是hook函數 hook函數相當于插件&#xff0c;可以實現一些額外的功能&#xff0c;而又不改變主體代碼。就像是把額外的功能掛在主體代碼上&#xff0c;所有叫hook&#xff08;鉤子&#xff09;。下面介紹Pytorch中的幾種主要hook函數。 torch.Tensor.register_h…

SQL進階之旅 Day 11:復雜JOIN查詢優化

【SQL進階之旅 Day 11】復雜JOIN查詢優化 在數據處理日益復雜的今天&#xff0c;JOIN操作作為SQL中最強大的功能之一&#xff0c;常常成為系統性能瓶頸。今天我們進入"SQL進階之旅"系列的第11天&#xff0c;將深入探討復雜JOIN查詢的優化策略。通過本文學習&#xf…

Spring AI 之檢索增強生成(Retrieval Augmented Generation)

檢索增強生成&#xff08;RAG&#xff09;是一種技術&#xff0c;有助于克服大型語言模型在處理長篇內容、事實準確性和上下文感知方面的局限性。 Spring AI 通過提供模塊化架構來支持 RAG&#xff0c;該架構允許自行構建自定義的 RAG 流程&#xff0c;或者使用 Advisor API 提…

前端開源JavaScrip庫

以下內容仍在持續完善中&#xff0c;如有遺漏或需要補充之處&#xff0c;歡迎在評論區指出。感謝支持&#xff0c;如果覺得有幫助&#xff0c;歡迎點贊鼓勵。感謝支持 JavaScript 框架Vue.jsVue.js - 漸進式 JavaScript 框架 | Vue.jsReactReactAngularHome ? AngularjQueryj…

什么是 CPU 緩存模型?

導語&#xff1a; CPU 緩存模型是后端性能調優、并發編程乃至分布式系統設計中一個繞不開的核心概念。它不僅關系到指令執行效率&#xff0c;還影響鎖機制、內存可見性等多個面試高頻點。本文將以資深面試官視角&#xff0c;詳解緩存模型的原理、常見面試題及實戰落地&#xff…

海外tk抓包簡單暴力方式

將地址替換下面代碼就可以 function hook_dlopen(module_name, fun) {var android_dlopen_ext Module.findExportByName(null, "android_dlopen_ext");if (android_dlopen_ext) {Interceptor.attach(android_dlopen_ext, {onEnter: function (args) {var pathptr …

多模態大語言模型arxiv論文略讀(103)

Are Bigger Encoders Always Better in Vision Large Models? ?? 論文標題&#xff1a;Are Bigger Encoders Always Better in Vision Large Models? ?? 論文作者&#xff1a;Bozhou Li, Hao Liang, Zimo Meng, Wentao Zhang ?? 研究機構: 北京大學 ?? 問題背景&…

代碼隨想錄算法訓練營 Day61 圖論ⅩⅠ Floyd A※ 最短路徑算法

圖論 題目 97. 小明逛公園 本題是經典的多源最短路問題。 在這之前我們講解過&#xff0c;dijkstra樸素版、dijkstra堆優化、Bellman算法、Bellman隊列優化&#xff08;SPFA&#xff09; 都是單源最短路&#xff0c;即只能有一個起點。 而本題是多源最短路&#xff0c;即求多…

【機器學習】集成學習與梯度提升決策樹

目錄 一、引言 二、自舉聚合與隨機森林 三、集成學習器 四、提升算法 五、Python代碼實現集成學習與梯度提升決策樹的實驗 六、總結 一、引言 在機器學習的廣闊領域中,集成學習(Ensemble Learning)猶如一座閃耀的明星,它通過組合多個基本學習器的力量,創造出…

yarn、pnpm、npm

非常好&#xff0c;這樣從“問題驅動 → 工具誕生 → 優化演進”的角度來講&#xff0c;更清晰易懂。下面我按時間線和動機&#xff0c;把 npm → yarn → pnpm 的演變脈絡講清楚。 &#x1f9e9; 一、npm 為什么一開始不夠好&#xff1f; 早期&#xff08;npm v4 及之前&…

如何用AI寫作?

過去半年&#xff0c;我如何用AI高效寫作&#xff0c;節省數倍時間 過去六個月&#xff0c;我幾乎所有文章都用AI輔助完成。我的朋友——大多是文字工作者&#xff0c;對語言極為敏感——都說看不出我的文章是AI寫的還是親手創作的。 我的AI寫作靈感部分來自丘吉爾。這位英國…

什么是trace,分布式鏈路追蹤(Distributed Tracing)

在你提到的 “個人免費版” 套餐中&#xff0c;“Trace 上報量&#xff1a;5 萬條 / 月&#xff0c;存儲 3 天” 里的 Trace 仍然是指 分布式鏈路追蹤記錄&#xff0c;但需要結合具體產品的場景來理解其含義和限制。以下是更貼近個人用戶使用場景的解釋&#xff1a; 一、這里的…

[免費]微信小程序網上花店系統(SpringBoot后端+Vue管理端)【論文+源碼+SQL腳本】

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;看到一個不錯的微信小程序網上花店系統(SpringBoot后端Vue管理端)【論文源碼SQL腳本】&#xff0c;分享下哈。 項目視頻演示 【免費】微信小程序網上花店系統(SpringBoot后端Vue管理端) Java畢業設計_嗶哩嗶哩_bilibili 項…

PyTorch——DataLoader的使用

batch_size, drop_last 的用法 shuffle shuffleTrue 各批次訓練的圖像不一樣 shuffleFalse 在第156step順序一致

【Linux】基礎文件IO

&#x1f31f;&#x1f31f;作者主頁&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所屬專欄&#xff1a;Linux 前言 無論是日常使用還是系統管理&#xff0c;文件是Linux系統中最核心的概念之一。對于初學者來說&#xff0c;理解文件是如何被創建、讀取、寫入以及存儲…

【JAVA后端入門基礎001】Tomcat 是什么?通俗易懂講清楚!

&#x1f4da;博客主頁&#xff1a;代碼探秘者 ?專欄&#xff1a;《JavaSe》 其他更新ing… ??感謝大家點贊&#x1f44d;&#x1f3fb;收藏?評論?&#x1f3fb;&#xff0c;您的三連就是我持續更新的動力?? &#x1f64f;作者水平有限&#xff0c;歡迎各位大佬指點&…