提交了两次AC,第一次错误出在了
if(matrix.size()==0||matrix[0].size()==0) return false;这两种情况是不一样的: matrix.size()==0对应于[]。 matrix[0].size()==0对应于[[]],这种情况下matrix.size()是1,但是matrix[0].size()为0。
最终AC代码。
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(); int n=matrix[0].size(); if(target<matrix[0][0]||target>matrix[m-1][n-1]) return false; int topRow=0; int buttonRow=m-1; while(topRow<buttonRow) { int mid=topRow+(buttonRow-topRow)/2; if(matrix[mid][n-1]<target) topRow=mid+1; else if(matrix[mid][n-1]>target) buttonRow=mid; else return true; } if(topRow>buttonRow) return false; //topRow==buttonRow int left=0; int right=n-1; while(left<right) { int mid=left+(right-left)/2; if(matrix[topRow][mid]<target) left=mid+1; else if(matrix[topRow][mid]>target) right=mid-1; else return true; } if((left>right)||(matrix[topRow][left]!=target)) return false; else return true; } };