日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode矩阵题——用辐射来理解

發(fā)布時間:2023/12/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode矩阵题——用辐射来理解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

542. 01 矩陣

給定一個由 0 和 1 組成的矩陣,找出每個元素到最近的 0 的距離。兩個相鄰元素間的距離為 1 。

示例 1:
輸入:

0 0 0 0 1 0 0 0 0

輸出:

0 0 0 0 1 0 0 0 0

示例 2:
輸入:

0 0 0 0 1 0 1 1 1

輸出:

0 0 0 0 1 0 1 2 1

注意:

給定矩陣的元素個數(shù)不超過 10000。
給定矩陣中至少有一個元素是 0。
矩陣中的元素只在四個方向上相鄰: 上、下、左、右。

分析:

想法一:廣度優(yōu)先搜索

  • 把每個源點0入隊,然后每個0向1一圈一圈輻射擴散
  • 設(shè)置 int[ ] [ ]dist 來記錄距離(即擴散的層次)并同時標志是否訪問過
  • 【注】要先把 matrix 數(shù)組中 1 的位置設(shè)置成 -1 (或無效的距離值)

    廣度優(yōu)先搜索

    找每個元素到最近的 0 的距離,即為,0到該元素的最短距離。可將0視作源點進行輻射。輻射過程如圖所示。

    1.紅色為源點。

    2.橙色為輻射第一圈。

    3.黃色為輻射第二圈。(因此該其值為2)

    由圖可知,

    1.將源點0(紅色)入隊,并將終點(即非0點,元素點)值改為-1,(-1為未訪問)

    2.將隊列中結(jié)點彈出,并在四個方向輻射,向左向右向上向下(方向矢量為左(-1,0)右(1,0)上(0,-1)下(0,1)),得到輻射第一圈結(jié)點。并將輻射第一圈結(jié)點值改為1。

    3.將輻射第一圈結(jié)點入隊,然后依次彈出,并在四個方向輻射(忽略源點方向,即只往-1方向輻射),得到輻射第二圈結(jié)點。并將輻射第二圈結(jié)點值改為2。

    重復執(zhí)行上述步驟,直至隊列為空

    4.返回新的matrix矩陣

    public class T542 {public int [][] updateMatrix(int[][] matrix){Queue<int[]> queue=new LinkedList<>();for (int i = 0; i < matrix.length; i++) {for(int j=0;j<matrix[0].length;j++){if(matrix[i][j]==0){queue.offer(new int[]{i,j});//0元素入隊}else {matrix[i][j]=-1;//-1為未訪問標記}}}//dx,dy表示坐標系中x,y向左、向右、向上、向下的分量int[] dx=new int[]{-1,1,0,0};int[] dy=new int[]{0,0,-1,1};while (!queue.isEmpty()){int[] point=queue.poll();//0元素出隊int x=point[0],y=point[1];for (int i = 0; i < 4; i++) {//彈出的0元素向四個方向移動后的新坐標int newX=x+dx[i];int newY=y+dy[i];// 如果四鄰域的點是 -1,表示這個點是未被訪問過的 1// 所以這個點到 0 的距離就可以更新成 matrix[x][y] + 1。if (newX >= 0 && newX < matrix.length && newY >= 0 && newY < matrix[0].length//判斷是否超出數(shù)組邊界&& matrix[newX][newY] == -1) {//判斷新坐標是否為終點-1matrix[newX][newY] = matrix[x][y] + 1;//將終點值-1,改為源點值+1queue.offer(new int[] {newX, newY});//將終點坐標加入隊列,進行第二輪的輻射}}}return matrix;}}

    第二種

    class Solution {public int[][] updateMatrix(int[][] matrix) {// 首先將 0 邊上的 1 入隊int[] dx = new int[] {-1, 1, 0, 0};int[] dy = new int[] {0, 0, -1, 1};Queue<int[]> queue = new LinkedList<>();int m = matrix.length, n = matrix[0].length;int[][] res = new int[m][n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (matrix[i][j] == 0) {for (int k = 0; k < 4; k++) {int x = i + dx[k];int y = j + dy[k];if (x >= 0 && x < m && y >= 0 && y < n && matrix[x][y] == 1 && res[x][y] == 0) {// 這是在 0 邊上的1。需要加上 res[x][y] == 0 的判斷防止重復入隊res[x][y] = 1;queue.offer(new int[] {x, y});}}}}}while (!queue.isEmpty()) {int[] point = queue.poll();int x = point[0], y = point[1];for (int i = 0; i < 4; i++) {int newX = x + dx[i];int newY = y + dy[i];if (newX >= 0 && newX < m && newY >= 0 && newY < n && matrix[newX][newY] == 1 && res[newX][newY] == 0) {res[newX][newY] = res[x][y] + 1;queue.offer(new int[] {newX, newY});}}}return res;} }

    動態(tài)規(guī)劃

    class Solution {public int[][] updateMatrix(int[][] matrix) {int m = matrix.length, n = matrix[0].length;int[][] dp = new int[m][n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {dp[i][j] = matrix[i][j] == 0 ? 0 : 10000;}}// 從左上角開始for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (i - 1 >= 0) {dp[i][j] = Math.min(dp[i][j], dp[i - 1][j] + 1);}if (j - 1 >= 0) {dp[i][j] = Math.min(dp[i][j], dp[i][j - 1] + 1);}}}// 從右下角開始for (int i = m - 1; i >= 0; i--) {for (int j = n - 1; j >= 0; j--) {if (i + 1 < m) {dp[i][j] = Math.min(dp[i][j], dp[i + 1][j] + 1);}if (j + 1 < n) {dp[i][j] = Math.min(dp[i][j], dp[i][j + 1] + 1);}}}return dp;} }

    總結(jié)

    以上是生活随笔為你收集整理的LeetCode矩阵题——用辐射来理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 1000部做爰免费视频 | 日大逼 | 黄色一级视频片 | 91久久精品一区二区 | 午夜精品久久久久久久久久久久久 | 午夜亚洲天堂 | 欧美一级乱黄 | 男生和女生操操 | 性色av免费观看 | 亚洲a∨无码无在线观看 | 亚洲一区激情 | 欧美大片在线播放 | 夜夜操免费视频 | 九九视频在线免费观看 | 成人av综合 | 欧美性猛交xxxxx水多 | 99有精品| 日批在线观看视频 | 国产日韩一区二区三区在线观看 | 国产亚洲精品网站 | 一女被多男玩喷潮视频 | 欧美成人精品一区二区免费看片 | 色婷五月 | 熟女少妇内射日韩亚洲 | 91网址入口| 蜜桃va| 国产第99页 | 色姑娘综合网 | 亚洲精品视频在线观看免费 | 日本熟妇色xxxxx日本免费看 | 亚洲人人人 | 色爱成人综合 | 天天操天天做 | 亚洲男人第一网站 | 日本一本高清视频 | 狠狠干超碰 | 97伦伦午夜电影理伦片 | 成人婷婷 | 国产91一区二区三区在线精品 | 亚洲爱爱网 | 日本五十熟hd丰满 | 欧美暧暧视频 | 免费视频久久久 | 欧美日韩激情在线观看 | 国产三级自拍 | 丰满岳乱妇在线观看中字无码 | 黄色片视频在线观看 | 在线免费观看a视频 | 色香欲综合网 | 男人天堂999 | 成人中文字幕在线 | av免费不卡 | 麻豆精品久久 | 久久久久久天堂 | 三级成人在线 | 麻豆免费视频网站 | 日韩成人综合 | 精品国产一区二区在线观看 | 在线视频91 | 午夜激情在线播放 | 亚洲大尺度视频 | 国内特级毛片 | 加勒比一区二区 | 丁香花电影免费播放电影 | 美女黄色av | 九色91蝌蚪 | av电影在线网站 | 国产日本欧美在线观看 | 99嫩草 | 亚洲欧美高清在线 | videosex抽搐痉挛高潮 | 男人爽女人下面动态图 | 日韩综合精品 | 国产999精品| 成人免费看片在线观看 | 青草视频在线免费观看 | 亚洲精品推荐 | 成人手机在线播放 | 日日爽夜夜| 日本一级淫片色费放 | 亚洲欧美日韩精品在线 | 欧美一级大黄 | 又黄又爽又刺激的视频 | 国产精品成人免费一区二区视频 | 亚洲欧美黄 | www.视频一区 | 日本大尺度吃奶做爰久久久绯色 | 亚洲一区成人 | 久久y| 麻豆免费视频 | 美女在线观看视频 | 人妻偷人精品一区二区三区 | 国产又好看的毛片 | 成人高清视频在线观看 | 老司机在线免费视频 | 青青青草视频 | 白浆av| 久久久久久久久福利 | 在线观看国产免费视频 |