第一种暴力,根据左神的代码敲的,
二维数组每一行每一列都是按照一定的顺序排序的,所以我们可以根据这一点从右上角开始遍历,如果当前元素小于目标整数,则目标元素可能在该列下面,大于目标整数,则目标元素可能在该行左列。
从右上角开始遍历,但还是存在一个问题。需要判断矩阵是否为空。
class Solution { public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { if(matrix.empty())return false; int row=0,col=matrix[0].size()-1; while(row < matrix.size() && col>=0) { if(matrix[row][col]>target) { col--; } else if(matrix[row][col]<target) { row++; } else return true; } return false; } };
问过很多人,如果矩阵为空,右上角matrix(0)则越界,第一维可以访问,第二维却不可以访问。
第二种从左下角开始遍历
class Solution { public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { int i = matrix.size() - 1, j = 0; while(i >= 0 && j < matrix[0].size()) { if(matrix[i][j] > target) i--; else if(matrix[i][j] < target) j++; else return true; } return false; } };
左下角的可以不需要判断是否为空因为不会涉及超限的问题。
越努力,越幸运。