1. 程式人生 > 其它 >LeetCode240 搜尋二維矩陣II

LeetCode240 搜尋二維矩陣II

題目

編寫一個高效的演算法來搜尋mxn矩陣 matrix 中的一個目標值 target 。該矩陣具有以下特性:

每行的元素從左到右升序排列。
每列的元素從上到下升序排列。

示例 1:
輸入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
輸出:true
示例 2:
輸入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
輸出:false


提示:
m == matrix.length
n == matrix[i].length
1 <= n, m <= 300
-109<= matrix[i][j] <= 109
每行的所有元素從左到右升序排列
每列的所有元素從上到下升序排列
-109<= target <= 109

方法

Z字搜尋法

從右上角開始搜尋,若左邊都比當前小,下邊都比當前大

  • 時間複雜度:O(m+n),m為行數,n為列數
  • 空間複雜度:O(1)
class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int m = matrix.length;
        int n = matrix[0].length;
        int i = 0,j = n-1;
        while(i<m&&j>=0){
            if(matrix[i][j]>target){
                j--;
            }else if(matrix[i][j]<target){
                i++;
            }else{
                return true;
            }
        }
        return false;
    }
}