搜尋二維矩陣

2021-07-26 05:59:16 字數 1496 閱讀 1929

寫出乙個高效的演算法來搜尋 m × n矩陣中的值。

這個矩陣具有以下特性

每行中的整數從左到右是排序的。

每行的第乙個數大於上一行的最後乙個整數。

樣例

考慮下列矩陣:

[ [1, 3, 5, 7],

[10, 11, 16, 20],

[23, 30, 34, 50]

] 給出 target = 3,返回 true

思路一:

最容易想到的一種解法就是兩層for迴圈遍歷二維陣列,不過這種方法時間複雜度為o(n^2),一點都不高效。

思路二:

要充分利用這個矩陣的特性。解讀一下特性,可以知道該二維矩陣的元素從左到右是遞增的,從上往下也是遞增的。(即按行遞增,按列遞增)

我們可以先選取二維陣列右上角的數字和要查詢的數字(target)進行比較,如果該數字和target相等,那麼查詢完畢;如果該數字和target不相等,就分大於和小於兩種情況:如果該數字大於target,那麼該數字所在的列就可以排除;如果該數字小於target,那麼該數字所在的行就可以排除。這樣我們每次比較右上角數字和target的時候都可以排除一行或者一列,一步一步的縮小比較範圍,直到查詢到target,或者不存在target。

/**

*@param matrix, a list of lists of integers

*@param target, an integer

*@return a boolean, indicate whether matrix contains target

*//** 解法1:時間複雜度位o(n^2)

*/// boolean flag = false;

// public boolean searchmatrix(int matrix, int target)

// }

// }

// return flag;

// }

/** 解法2:

*/boolean flag = false;

public

boolean

searchmatrix(int matrix,int target)else

int row=0;//元素的位置(橫座標)

int column = columns-1;//元素的位置(縱座標)

if(matrix!=null && rows>0 && columns>0)else

if(matrix[row][column] < target )else

}}else

return flag;

}

搜尋二維矩陣

寫出乙個高效的演算法來搜尋 m n矩陣中的值。這個矩陣具有以下特性 樣例 考慮下列矩陣 1,3,5,7 10,11,16,20 23,30,34,50 給出target 3,返回true 解題思路 可以把這個矩陣,看成是乙個大的一維陣列,1,3,5,7,10,11,16,20,23,34,50。然後...

搜尋二維矩陣

二分查詢第一題 衝 先看題目 編寫乙個高效的演算法來判斷 m x n 矩陣中,是否存在乙個目標值。該矩陣具有如下特性 例 輸入 matrix 1,3,5,7 10,11,16,20 23,30,34,60 target 3 輸出 true 我的解法 public boolean searchmatr...

搜尋二維矩陣 II

搜尋二維矩陣 ii 寫出乙個高效的演算法來搜尋m n矩陣中的值,返回這個值出現的次數。這個矩陣具有以下特性 您在真實的面試中是否遇到過這個題?yes 樣例考慮下列矩陣 1,3,5,7 2,4,7,8 3,5,9,10 給出target 3 返回2 思路 行和列都是有序的,如果以右上角為起點來判斷大小...