剑指 Offer 04. 二维数组中的查找
暴力搜索
var findNumberIn2DArray = function(matrix, target) {let rowLen = matrix.length;if (rowLen === 0) return false;let colLen = matrix[0].length;// 遍历每一行for (let i = 0; i < rowLen; i++) {// 如果 target 在当前行,才会遍历当前行if (target >= matrix[i][0] && target <= matrix[i][colLen - 1]) {for (let j = 0; j < matrix[i].length; j++) {if (matrix[i][j] === target) return true;}}}return false;};
把矩阵逆时针旋转 45°
发现其结构类似 二分搜索树
图片转自 https://leetcode-cn.com/leetbook/read/illustration-of-algorithm/5vl81e/

public boolean findNumberIn2DArray(int[][] matrix, int target) {// 总行数int rowCount = matrix.length;// 如果总行数为 0if (rowCount == 0) return false;// 总列数int colCount = matrix[0].length;// 定义顶点坐标,在右上角int i = 0;int j = colCount - 1;// 如果没有越界,因为 i 只会递增,j 只会递减,所以只需要判断一边while (i < rowCount && j >= 0) {// 为了方便对比,用临时变量存储当前节点值int temp = matrix[i][j];// 如果匹配了,返回 trueif (temp == target) return true;// 往树的右边移动else if (temp < target) i ++;// 往树的左边移动else j --;}return false;}
