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.
For example,
Consider the following matrix:
[ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ]
Given target = 3
, return true
.
题目的意思是:给定一个m*n的矩阵和一个target,矩阵和target都是整数,并且矩阵的每一行的数都是排好序的,而且下一行的第一个数字比当前行的最后一个数字大,判断target是否存在于矩阵中。首先判断基本情况,如果矩阵的行为空或者矩阵的列为空,那么返回FALSE,否则的话再继续判断,判断target与每一行的第一个数字和最后一个数字的大小,如果target>=某行的第一个数字并且<=某行的最后一个数字,说明target会存在于该行,然后再遍历该行的所有数字,遇到与target相同的数字返回TRUE即可。如果整个循环执行完毕还没有找到与target相同的数字,返回FALSE。
//将target与matrix中每一行的首尾相比较
int m = matrix.length;
if(m==0){return false;}
int n = matrix[0].length;
if(n==0||target<matrix[0][0]){return false;}
//if(){return false;}
for(int i=0;i<m;i++){
if(target>=matrix[i][0]&&target<=matrix[i][n-1]){
for(int j=0;j<n;j++){
if(target==matrix[i][j]){
return true;
}
}
}
}
return false;
这段代码的效率有73%,第一次写效率这么高的代码,哈哈开心**