p7 行列递增的二维数组的搜索 (leetcode 240)
一:解题思路
这个题目的解题的关键在于抓住二维矩阵的规律,从左向右是递增的,从上到下是递增的。得到二维数组的行数(i)和列数(j)。1.将坐标定位到二维数组的右上角,如果目标值target小于此时的二维数组的元素,说明此时二维数组所对应的一整列都大于目标值,此时 j--。2.如果目标值target大于此时的二维数组的元素,说明此时二维数组所对应元素的左边都比target小,此时i++。
二:完整代码示例 (C++版和Java版)
class Solution { public: bool searchMatrix(vector<vector<int>>& matrix, int target) { if (matrix.size() == 0 || matrix[0].size() == 0) return false; int m = matrix.size(), n = matrix[0].size();//m为二维数组的行数,n为二维数组的列数 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; } };
Java版:
class Solution { public boolean searchMatrix(int[][] matrix, int target) { if(matrix==null||matrix.length==0) return false; if(matrix[0]==null||matrix[0].length==0) return false; int m=matrix.length,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; } }

浙公网安备 33010602011771号