leetcode 240. Search a 2D Matrix II | 240. 搜索二维矩阵 II(Java)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                leetcode 240. Search a 2D Matrix II | 240. 搜索二维矩阵 II(Java)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                題目
https://leetcode.com/problems/search-a-2d-matrix-ii/
 
題解
方法1
思路類似于 leetcode 200. Number of Islands | 200. 島嶼數量(Java) 的“感染”過程,從左上角開始找,遞歸其右邊和下邊的格子,同時為了避免重復路線,做了一些優化。trace 用來記錄已經走過的路線。
復雜度分析:這種不走重復路線的遞歸方式,時間復雜度應該是O(m*n)吧,不是很確定。
class Solution {public boolean searchMatrix(int[][] matrix, int target) {int M = matrix.length;int N = matrix[0].length;boolean[][] trace = new boolean[M][N]; // 避免重復路線return process(matrix, trace, 0, 0, target);}public boolean process(int[][] matrix, boolean[][] trace, int m, int n, int t) {if (m == matrix.length || n == matrix[0].length || matrix[m][n] > t) return false;if (matrix[m][n] == t) return true;trace[m][n] = true;if (m + 1 < matrix.length && !trace[m + 1][n] && process(matrix, trace, m + 1, n, t)) return true;else return n + 1 < matrix[0].length && !trace[m][n + 1] && process(matrix, trace, m, n + 1, t);} }方法2:完美利用矩陣的性質進行查找(最優解)
參考:官方題解
 
從左下角開始,執行以下操作:如果當前值大于目標值,則向上移動;如果當前值小于目標值,則向右移動。
這樣做永遠不會跳過正確的答案,因為每一行都是升序排列,所以當前值右側的每個值都更大。 每一列都是升序排列,所以當前值上方的每個值都更小,這決定了在每一個位置上,下一步的路線是唯一的。即,如果當前值已經大于目標值,只能向上走,而入如果當前值小于目標值,只能向右走。因此,這種搜索方式將始終在矩陣中找到目標(如果存在)。
關于“如何選出發點”的補充:
- 選左上角,往右走和往下走都增大,不能選
- 選右下角,往上走和往左走都減小,不能選
- 選左下角,往右走增大,往上走減小,可選
- 選右上角,往下走增大,往左走減小,可選
方法3:暴力遍歷
依次比較每個元素。時間復雜度O(m*n)
 
總結
以上是生活随笔為你收集整理的leetcode 240. Search a 2D Matrix II | 240. 搜索二维矩阵 II(Java)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: leetcode 238. Produc
- 下一篇: leetcode 241. Differ
