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


該題目首先我想到的算法是bfs,但是bfs的空間復雜度較高,需要額外的隊列,在看完題解之后,發現了動態規划這個好辦法。具體程序代碼如下:

vector<vector<int>> updateMatrix(vector<vector<int>>& matrix) {
        int m = matrix.size(), n = matrix[0].size();
        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (matrix[i][j] == 1) {
                    matrix[i][j] = INT_MAX / 2;
                }
            }
        }

        for (int i = 0; i < m; ++i) {
            for (int j = 0; j < n; ++j) {
                if (i - 1 >= 0) {
                    matrix[i][j] = min(matrix[i][j], matrix[i - 1][j] + 1);
                }
                if (j - 1 >= 0) {
                    matrix[i][j] = min(matrix[i][j], matrix[i][j - 1] + 1);
                }
            }
        }

        for (int i = m - 1; i >= 0; --i) {
            for (int j = n - 1; j >= 0; --j) {
                if (i + 1 < m) {
                    matrix[i][j] = min(matrix[i][j], matrix[i + 1][j] + 1);
                }
                if (j + 1 < n) {
                    matrix[i][j] = min(matrix[i][j], matrix[i][j + 1] + 1);
                }
            }
        }
        
        return matrix;
    }

 

這里在dp過程中,遵循着從左上到右下再從右下到左上的方法,原因是,離該點最近的零一定在左上方或者右下方着兩個區域內。因此只需要執行兩遍即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 Leetcode練習(Python):哈希表類:第136題:給定一個非空整數數組,除了某個元素只出現一次以外,其余每個元素均出現兩次。找出那個只出現了一次的元素。 找出數組中每個數右邊第一個比它大的元素 找出數組中每個數右邊第一個比它大的元素 pytorch :使用兩次sort函數(排序)找出矩陣每個元素在升序或降序排列中的位置 面試題:給定一個長度為N的數組,其中每個元素的取值范圍都是1到N。判斷數組中是否有重復的數字 在排序數組中查找元素的第一個和最后一個位置(給定一個按照升序排列的整數數組 nums,和一個目標值 target。找出給定目標值在數組中的開始位置和結束位置。) 查找常用字符(給定僅有小寫字母組成的字符串數組 A,返回列表中的每個字符串中都顯示的全部字符(包括重復字符)組成的列表。例如,如果一個字符在每個字符串中出現 3 次,但不是 4 次,則需要在最終答案中包含該字符 3 次。) [算法] 已知在平面坐標系內有N個點,求離開給定坐標距離最近的10個點 給定兩個有序的整形數組,找出里邊的相同元素 寫一個小程序,參數是含有10個整數的數組,計算10個正整數的平均值,找出這10個數中與平均值距離(差值得絕對值)最近的三個數,以距離大小對這三個數進行排序和輸出(與平均值距離最小的先輸出)
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM