标签:matrix int 复杂度 矩阵 力扣 240 列数 size
1、直接循环(超出时间限制)
时间复杂度:O(mn):m、n分别为矩阵的行数、列数,mn即为矩阵元素个数
空间复杂度:O(1)
bool searchMatrix(vector<vector<int>>& matrix, int target) { if(matrix.empty()) return false; //用m保存矩阵的行数,用n保存矩阵的列数 int m=matrix.size(); int n=matrix[0].size(); for(int i=0;i<m;i++) for(int j=0;j<n;j++){ if(matrix[i][j]==target) return true; } return false; }
2、循环加二分(超时)
时间复杂度:O(mlog n):m、n分别为矩阵的行数、列数
空间复杂度:O(1)
1 bool searchMatrix(vector<vector<int>>& matrix, int target) { 2 if(matrix.empty()) 3 return false; 4 //用m保存矩阵的行数,用n保存矩阵的列数 5 int m=matrix.size(); 6 int n=matrix[0].size(); 7 int left=0,right=n-1; 8 int mid=0; 9 for(int i=0;i<m;i++){ 10 left=0,right=n-1,mid=(left+right)/2; 11 while(left<=right){ 12 if(matrix[i][mid]==target) 13 true; 14 else if(matrix[i][mid]<target) 15 left=mid+1; 16 else 17 right=mid-1; 18 } 19 } 20 return false; 21 }
3、用树的思想来做(104ms,56%;14.3MB,98%)
时间复杂度:O(m+n):m、n分别为矩阵的行数和列数
空间复杂度:O(1)
1 bool searchMatrix(vector<vector<int>>& matrix, int target) { 2 if(matrix.empty()) 3 return false; 4 //用m保存矩阵的行数,用n保存矩阵的列数 5 int m=matrix.size(); 6 int n=matrix[0].size(); 7 //从矩阵的左下角开始比较,target偏大则右移,偏小则上移,也可从右上角开始比较 8 //因为该矩阵中,同一行时右边大于左边,同一列时下面大于上面 9 for(int i=m-1,j=0;i>=0&&j<n;){ 10 if(matrix[i][j]==target) 11 return true; 12 else if(matrix[i][j]>target) 13 i--; 14 else 15 j++; 16 } 17 return false; 18 }
标签:matrix,int,复杂度,矩阵,力扣,240,列数,size 来源: https://www.cnblogs.com/Wow-A/p/15639932.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。