摘要:題目要求假設(shè)左上角的所有周圍面積為太平洋,右下角的所有面積為大西洋。假定水只能從高出流向低處,要求找出所有既可以流向太平洋也可以流向大西洋的水域。但是反過來來看,任意一個(gè)可以到達(dá)大西洋的水流必然會(huì)抵達(dá)數(shù)組左邊和上邊的任意一點(diǎn)。
題目要求
Given an m x n matrix of non-negative integers representing the height of each unit cell in a continent, the "Pacific ocean" touches the left and top edges of the matrix and the "Atlantic ocean" touches the right and bottom edges. Water can only flow in four directions (up, down, left, or right) from a cell to another one with height equal or lower. Find the list of grid coordinates where water can flow to both the Pacific and Atlantic ocean. Note: The order of returned grid coordinates does not matter. Both m and n are less than 150. Example: Given the following 5x5 matrix: Pacific ~ ~ ~ ~ ~ ~ 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 * * * * * * Atlantic Return: [[0, 4], [1, 3], [1, 4], [2, 2], [3, 0], [3, 1], [4, 0]] (positions with parentheses in above matrix).
假設(shè)左上角的所有周圍面積為太平洋,右下角的所有面積為大西洋。現(xiàn)在使用數(shù)組來表示一大片水域,其中數(shù)組的每一個(gè)位置上的元素代表某一個(gè)小水域的高度。假定水只能從高出流向低處,要求找出所有既可以流向太平洋也可以流向大西洋的水域。
思路和代碼首先需要理解題意,題目中強(qiáng)調(diào)了水流可以涌向上下左右四個(gè)方向,即水流并非只能一直往左流或是一直往上流才能達(dá)到太平洋,它可以繞著圈子轉(zhuǎn),如下面的例子所示:
{1,2,3}, {8,9,4}, {7,6,5}
高度為6的水域的水可以由6->5->4并最終匯入太平洋
這道題目直觀上來看是需要以數(shù)組中的任意一個(gè)位置為起點(diǎn),分別尋找一條數(shù)字由大到小并最終到達(dá)左上側(cè)或是右下側(cè)的路徑。但是反過來來看,任意一個(gè)可以到達(dá)大西洋的水流必然會(huì)抵達(dá)數(shù)組左邊和上邊的任意一點(diǎn)。因此,我們可以以數(shù)組的邊緣作為起點(diǎn),尋找所有數(shù)字由小到大的路徑,該路徑上的所有點(diǎn)必然可以到達(dá)該邊所在的洋流。
這里可以采用深度優(yōu)先搜索或是廣度優(yōu)先搜索的方式遍歷所有的可達(dá)水域。停止延伸的條件就是遇到已經(jīng)訪問過的水域或者該水域的高度低于前置水域高度。
代碼如下:
public ListpacificAtlantic(int[][] matrix) { List result = new ArrayList<>(); if(matrix==null || matrix.length==0 || matrix[0].length==0) return result; int rows = matrix.length; int columns = matrix[0].length; //能夠流入太平洋 boolean[][] canReachPacific = new boolean[matrix.length][matrix[0].length]; //能夠流入大西洋 boolean[][] canReachAtlantic = new boolean[matrix.length][matrix[0].length]; for(int i = 0 ; i
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/74732.html
摘要:題目鏈接思路是分別找到和能夠流到的地方,然后求兩個(gè)地方的交集。找和能流到的地方,就是這個(gè)的遍歷過程,可以用或者。復(fù)雜度沒什么差,寫起來簡(jiǎn)單點(diǎn)。 417. Pacific Atlantic Water Flow 題目鏈接:https://leetcode.com/problems... 思路是分別找到pacific和atlantic能夠流到的地方,然后求兩個(gè)地方的交集。找pacific和...
摘要:容器最大盛水量給定個(gè)非負(fù)整數(shù),,,,其中每個(gè)表示坐標(biāo),處的點(diǎn)。找到兩條線,它們與軸一起形成一個(gè)容器,使得容器含有最多的水。 容器最大盛水量 Container With Most Water 給定n個(gè)非負(fù)整數(shù)a1,a2,...,an,其中每個(gè)表示坐標(biāo)(i,ai)處的點(diǎn)。 繪制n條垂直線,使得線i的兩個(gè)端點(diǎn)在(i,ai)和(i,0)處。 找到兩條線,它們與x軸一起形成一個(gè)容器,使得容器...
摘要:復(fù)雜度思路因?yàn)樾钏嗌偃Q于比較短的那塊板的長(zhǎng)度。代碼復(fù)雜度思路考慮說明時(shí)候需要計(jì)算蓄水量當(dāng)?shù)臅r(shí)候,需要計(jì)算能儲(chǔ)存的水的多少。每次還需要取出一個(gè)作為中間值。如果則一直向里面壓進(jìn)去值,不需要直接計(jì)算。 Leetcode[42] Trapping Rain Water Given n non-negative integers representing an elevation map ...
閱讀 1211·2023-04-26 02:20
閱讀 3337·2021-11-22 14:45
閱讀 4111·2021-11-17 09:33
閱讀 971·2021-09-06 15:00
閱讀 1479·2021-09-03 10:30
閱讀 3837·2021-07-26 22:01
閱讀 990·2019-08-30 15:54
閱讀 530·2019-08-30 15:43