1. Search a 2D Matrix I
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
在一个矩阵中查找给定数字,矩阵每一行是递增的,并且每一行第一列元素比上一行最后一列元素大。可以通过矩阵每一行最后元素和target之间的大小来推断出target可能在第几行。
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.size()==0||matrix[0].size()==0) //对于[]和[[]]这两种输入都不行
return false;
int n=matrix[0].size();
int i;
for(i=0;i<matrix.size();i++)
if(matrix[i][n-1]>=target)
break;
if(i==matrix.size()) //比最后一行最后一列的元素还大,说明没找到
return false;
for(int j=0;j<n;j++)
if(matrix[i][j]==target)
return true;
return false;
}
};
1. Search a 2D Matrix II
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted in ascending from left to right.
Integers in each column are sorted in ascending from top to bottom.
矩阵每一行,每一列递增,查找target是否在矩阵中。
我选择每次都拿a[i][i]和target去比较,如果target>a[i][i],那么以(i,i)为左上角的矩阵就不需要考虑了。
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.size()==0||matrix[0].size()==0)
return false;
int n=matrix.size()<matrix[0].size()?matrix.size():matrix[0].size();
int i;
for(i=0;i<n;i++)
if(target<matrix[i][i])
break;
for(int k=0;k<i;k++){
for(int j=k;j<matrix[0].size();j++)
if(matrix[k][j]==target)
return true;
for(int j=k;j<matrix.size();j++)
if(matrix[j][k]==target)
return true;
}
return false;
}
};