搜索一个二维矩阵之二。题意跟[LeetCode] 74. Search a 2D Matrix很接近,唯一的不同是matrix只是做到了每一行上的元素是有序的,每一列也是有序的,但是convert成一维数组后,一维数组并不能做到整体有序。例子
Example:
Consider the following 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] ]Given target =
5, returntrue.Given target =
20, returnfalse.
因为input的规律是每一行是有序的,每一列也是有序的,所以可以从数组的右上角(比如例子中的15好了)开始扫描,如果小于15,就往左;如果大于15,就一定在下一行。
时间O(m + n)
空间O(1)
1 /**
2 * @param {number[][]} matrix
3 * @param {number} target
4 * @return {boolean}
5 */
6 var searchMatrix = function(matrix, target) {
7 // corner case
8 if (matrix === null || matrix.length === 0) return false;
9
10 // normal case
11 let row = 0;
12 let col = matrix[0].length - 1;
13 while (col >= 0 && row <= matrix.length - 1) {
14 if (target === matrix[row][col]) {
15 return true;
16 } else if (target < matrix[row][col]) {
17 col--;
18 } else {
19 row++;
20 }
21 }
22 return false;
23 };