搜索算法------DFS練習2

1. 題目

在這里插入圖片描述
在這里插入圖片描述

2. 思路和題解

從題目中可以看出,如果一個格子上有雨水,那么就可以流到周圍比他高度低的單元格,如果單元格和海洋相鄰,那么雨水也會流入海洋。總而言之一句話就是水從高處流向低處。從這里的流向可以聯想到深度優先搜索這個算法。但是這里我們任意選擇單元格去進行搜索的時候,按照正常的思路,后面會不可避免的遍歷到重復的單元格,這樣會大大的增加搜索時間。所以要換個思路,既然雨水從高流向低,并且靠近海洋的會直接流入海洋,那么我們在采用深度優先搜索的時候,下一個就要去找更大的單元格,利用反向搜索的思路去解決問題。
在進行反向搜索的時候,如果一個單元格既可以從太平洋反向到達,又可以從大西洋反向到達,那么這個單元格就是我們需要的單元格。
代碼實現如下:

class Solution {static int[][] dirs = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};int[][] heights;int m, n;public List<List<Integer>> pacificAtlantic(int[][] heights) {this.heights = heights;this.m = heights.length;this.n = heights[0].length;boolean[][] pacific = new boolean[m][n];boolean[][] atlantic = new boolean[m][n];for (int i = 0; i < m; i++) {dfs(i, 0, pacific);}for (int j = 1; j < n; j++) {dfs(0, j, pacific);}for (int i = 0; i < m; i++) {dfs(i, n - 1, atlantic);}for (int j = 0; j < n - 1; j++) {dfs(m - 1, j, atlantic);}List<List<Integer>> result = new ArrayList<List<Integer>>();for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (pacific[i][j] && atlantic[i][j]) {List<Integer> cell = new ArrayList<Integer>();cell.add(i);cell.add(j);result.add(cell);}}}return result;}public void dfs(int row, int col, boolean[][] ocean) {if (ocean[row][col]) {return;}ocean[row][col] = true;for (int[] dir : dirs) {int newRow = row + dir[0], newCol = col + dir[1];if (newRow >= 0 && newRow < m && newCol >= 0 && newCol < n && heights[newRow][newCol] >= heights[row][col]) {dfs(newRow, newCol, ocean);}}}
}

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

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

相關文章

[python] 正則表達式

1.分割str s"1-2--3---4" are.findall(r\d|[-],s) # 輸出&#xff1a;[1, -, 2, --, 3, ---, 4]s"-4(2(3)" # ? 表示 - 可以出現0次或1次 # \d 表示匹配一個或多個連續數字 # \D 表示匹配非數字字符 sre.findall(r-?\d|\D,s) # 輸出&#xff1a;[-4, (,…

定制化管理系統與通用管理系統,誰更勝一籌?

一、定制化管理系統與通用管理系統的定義與特點 定制化管理系統 定制化管理系統是根據企業的具體業務需求和流程進行個性化開發的軟件系統。它能夠深度貼合企業的管理需求&#xff0c;提供高度靈活的解決方案。其特點包括&#xff1a; 高度適應性&#xff1a;能夠精準匹配企業…

gitee 配置git上傳

Git入門&#xff1f;查看 幫助 , Visual Studio / TortoiseGit / Eclipse / Xcode 下如何連接本站, 如何導入倉庫 簡易的命令行入門教程: Git 全局設置: 以 176fuguM2項目為例 git config --global user.name "墮落圣甲蟲" git config --global user.email "11…

SpringBoot+Vue 中 WebSocket 的使用

WebSocket 是一種在單個 TCP 連接上進行全雙工通信的協議&#xff0c;它使得客戶端和服務器之間可以進行實時數據傳輸&#xff0c;打破了傳統 HTTP 協議請求 - 響應模式的限制。 下面我會展示在 SpringBoot Vue 中&#xff0c;使用WebSocket進行前后端通信。 后端 1、引入 j…

STM32 FATFS - 在SDIO的SD卡中運行fatfs

參考文章 STM32CubeMX | SD Card FATFS - 知乎 [STM32F4]基于F407的硬件移植Free RTOSFATFS&#xff08;SDIO&#xff09;_freertosfatfs-CSDN博客 例程地址&#xff1a;STM32FatFS: 基于stm32的fatfs例程&#xff0c;配合博客文章 基于梁山派天空星開發板&#xff0c;STM3…

Java 進化之路:從 Java 8 到 Java 21 的重要新特性

Java 進化之路&#xff1a;從 Java 8 到 Java 21 的重要新特性 開篇介紹 在軟件開發領域&#xff0c;Java 作為一門歷史悠久且廣泛應用的編程語言&#xff0c;始終保持著其核心競爭力和持續創新能力。自 Java 8 發布以來&#xff0c;Java 經歷了一系列重要版本更新&#xff0…

Reactor 事件流 vs. Spring 事件 (ApplicationEvent)

Reactor 事件流 vs. Spring 事件 ApplicationEvent Reactor 事件流 vs. Spring 事件 (ApplicationEvent)1?? 核心區別2?? Spring 事件 (ApplicationEvent)? 示例&#xff1a;Spring 事件發布 & 監聽1?? 定義事件2?? 發布事件3?? 監聽事件&#x1f539; 進階&…

JVM生產環境問題定位與解決實戰(六):總結篇——問題定位思路與工具選擇策略

本文已收錄于《JVM生產環境問題定位與解決實戰》專欄&#xff0c;完整系列見文末目錄 引言 在前五篇文章中&#xff0c;我們深入探討了JVM生產環境問題定位與解決的實戰技巧&#xff0c;從基礎的jps、jmap、jstat、jstack、jcmd等工具&#xff0c;到JConsole、VisualVM、MAT的…

【5090d】配置運行和微調大模型所需基礎環境【一】

RuntimeError: Failed to import transformers.integrations.bitsandbytes because of the following error (look up to see its traceback): No module named triton.ops 原因&#xff1a;是因為在導入 transformers.integrations.bitsandbytes 時缺少必要的依賴項 triton.op…

華為交換綜合實驗——VRRP、MSTP、Eth-trunk、NAT、DHCP等技術應用

一、實驗拓撲 二、實驗需求 1,內網Ip地址使用172.16.0.0/16分配 2,sw1和SW2之間互為備份 3, VRRP/STP/VLAN/Eth-trunk均使用 4,所有Pc均通過DHCP獲取IP地址 5,ISP只能配置IP地址 6,所有電腦可以正常訪問IsP路由器環回 三、需求分析 1、設備連接需求 二層交換機&#xff08;LS…

DeepSeek 開源的 3FS 如何?

DeepSeek 3FS&#xff08;Fire-Flyer File System&#xff09;是一款由深度求索&#xff08;DeepSeek&#xff09;于2025年2月28日開源的高性能并行文件系統&#xff0c;專為人工智能訓練和推理任務設計。以下從多個維度詳細解析其核心特性、技術架構、應用場景及行業影響&…

Qt實現HTTP GET/POST/PUT/DELETE請求

引言 在現代應用程序開發中&#xff0c;HTTP請求是與服務器交互的核心方式。Qt作為跨平臺的C框架&#xff0c;提供了強大的網絡模塊&#xff08;QNetworkAccessManager&#xff09;&#xff0c;支持GET、POST、PUT、DELETE等HTTP方法。本文將手把手教你如何用Qt實現這些請求&a…

echarts+HTML 繪制3d地圖,加載散點+散點點擊事件

首先&#xff0c;確保了解如何本地引入ECharts庫。 html 文件中引入本地 echarts.min.js 和 echarts-gl.min.js。 可以通過官網下載或npm安裝&#xff0c;但這里直接下載JS文件更簡單。需要引入 echarts.js 和 echarts-gl.js&#xff0c;因為3D地圖需要GL模塊。 接下來是HTM…

深度剖析 MySQL 與 Redis 緩存一致性:理論、方案與實戰

在當今的互聯網應用開發中&#xff0c;MySQL 作為可靠的關系型數據庫&#xff0c;與 Redis 這一高性能的緩存系統常常協同工作。然而&#xff0c;如何確保它們之間的數據一致性&#xff0c;成為了開發者們面臨的重要挑戰。本文將深入探討 MySQL 與 Redis 緩存一致性的相關問題&…

DAO 類的職責與設計原則

1. DAO 的核心職責 DAO&#xff08;Data Access Object&#xff0c;數據訪問對象&#xff09;的主要職責是封裝對數據的訪問邏輯&#xff0c;但它與純粹的數據實體類&#xff08;如 DTO、POJO&#xff09;不同&#xff0c;也與 Service 業務邏輯層不同。 DAO 應該做什么&…

【Kubernetes】如何使用 kubeadm 搭建 Kubernetes 集群?還有哪些部署工具?

使用 kubeadm 搭建 Kubernetes 集群是一個比較常見的方式。kubeadm 是 Kubernetes 提供的一個命令行工具&#xff0c;它可以簡化 Kubernetes 集群的初始化和管理。下面是使用 kubeadm 搭建 Kubernetes 集群的基本步驟&#xff1a; 1. 準備工作 確保你的環境中有兩臺或更多的機…

Pycharm(十二)列表練習題

一、門和鑰匙 小X在一片大陸上探險&#xff0c;有一天他發現了一個洞穴&#xff0c;洞穴里面有n道門&#xff0c; 打開每道門都需要對應的鑰匙&#xff0c;編號為i的鑰匙能用于打開第i道門&#xff0c; 而且只有在打開了第i(i>1)道門之后&#xff0c;才能打開第i1道門&#…

在未歸一化的線性回歸模型中,特征的尺度差異可能導致模型對特征重要性的誤判

通過數學公式來更清晰地說明歸一化對模型的影響&#xff0c;以及它如何改變特征的重要性評估。 1. 未歸一化的情況 假設我們有一個線性回歸模型&#xff1a; y β 0 β 1 x 1 β 2 x 2 ? y \beta_0 \beta_1 x_1 \beta_2 x_2 \epsilon yβ0?β1?x1?β2?x2?? 其…

JS—頁面渲染:1分鐘掌握頁面渲染過程

個人博客&#xff1a;haichenyi.com。感謝關注 一. 目錄 一–目錄二–頁面渲染過程三–DOM樹和渲染樹 二. 頁面渲染過程 瀏覽器的渲染過程可以分解為以下幾個關鍵步驟 2.1 解析HTML&#xff0c;形成DOM樹 瀏覽器從上往下解析HTML文檔&#xff0c;將標簽轉成DOM節點&#…

niuhe插件, 在 go 中渲染網頁內容

思路 niuhe 插件生成的 go 代碼是基于 github.com/ma-guo/niuhe 庫進行組織管理的, niuhe 庫 是對 go gin 庫的一個封裝&#xff0c;因此要顯示網頁, 可通過給 gin.Engine 指定 HTMLRender 來實現。 實現 HTMLRender 我們使用 gitee.com/cnmade/pongo2gin 實現 1. main.go …