每日一重0427太平洋

题目实质

有一个m×n的矩形岛屿,与安宁洋和大西洋相邻。“安宁洋”处于陆地的左畛域和上畛域,而“大西洋”处于陆地的右畛域和下畛域。

这个岛被分隔成一个由几许方形单位格构成的网格。给定一个mxn的整数矩阵heights,heights[r][c]示意坐标(r,c)上单位格高于海平面的高度。

岛上雨水较多,要是相邻单位格的高度小于或即是今朝单位格的高度,雨水能够直接向北、南、东、西流向相邻单位格。水能够从海洋邻近的任何单位格流入海洋。

返回网格坐标result的2D列表,此中result[i]=[ri,ci]示意雨水能够从单位格(ri,ci)流向安宁洋和大西洋

题目说明

简明的想,水往低处流,则能够对每一个点遍历一遍,不过云云功夫繁杂渡太高,不实际。

以是反过来想,咱们能够让水往高处流,决断从畛域能够抵达哪些格子。流程能够采取深度优先算法也许广度优先算法合作印象化搜寻,保证每个格子仅被遍历一遍。

代码

staticconstintdirs[4][2]={{-1,0},{1,0},{0,-1},{0,1}};classSolution{public:voiddfs(introw,intcol,vectorvectorboolocean,vectorvectorintheights){if(ocean[row][col])return;intm=ocean.size();intn=ocean[0].size();ocean[row][col]=true;for(inti=0;i4;i++){intnextRow=row+dirs[i][0],nextCol=col+dirs[i][1];if(nextColnnextCol=0nextRowmnextRow=0heights[nextRow][nextCol]=heights[row][col]){dfs(nextRow,nextCol,ocean,heights);}}}vectorvectorintpacificAtlantic(vectorvectorintheights){intm=heights.size();intn=heights[0].size();vectorvectorboolpacific(m,vectorbool(n,false));vectorvectorboolatlantic(m,vectorbool(n,false));for(inti=0;im;i++){dfs(i,0,pacific,heights);dfs(i,n-1,atlantic,heights);}for(inti=0;in;i++){dfs(0,i,pacific,heights);dfs(m-1,i,atlantic,heights);}vectorvectorintresult;for(inti=0;im;i++){for(intj=0;jn;j++){if(pacific[i][j]atlantic[i][j]){vectorintcell;cell.emplace_back(i);cell.emplace_back(j);result.emplace_back(cell);}}}returnresult;}};繁杂度说明

功夫繁杂度=空间繁杂度=

预览时标签弗成点收录于合集#个

转载请注明:http://www.abuoumao.com/hytd/1120.html

网站简介| 发布优势| 服务条款| 隐私保护| 广告合作| 网站地图| 版权申明

当前时间: 冀ICP备19029570号-7