搜索一个二维矩阵。题意是给一个二维数组和一个target,问是否能在二维数组中找到这个target。
思路是将input convert成一个一维数组,然后用二分法做。这题因为convert完了之后,input是一个有序的一维数组,所以可以用二分法做。例子,
时间O(log mn), 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) { 9 return false; 10 } 11 12 // normal case 13 let row = matrix.length; 14 let col = matrix[0].length; 15 let start = 0; 16 let end = row * col - 1; 17 while (start <= end) { 18 let mid = Math.floor(start + (end - start) / 2); 19 let value = matrix[Math.floor(mid / col)][Math.floor(mid % col)]; 20 if (value === target) { 21 return true; 22 } else if (value < target) { 23 start = mid + 1; 24 } else { 25 end = mid - 1; 26 } 27 } 28 return false; 29 };