class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[0].length; j++) {
if (matrix[i][j] == target)
return true;
}
}
return false;
}
}
Z形查找
时间:O(m+n)
空间:O(1)
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int m = matrix.length, n = matrix[0].length;
int x = 0, y = n - 1;
while (x < m && y >= 0) {
if (matrix[x][y] == target) {
return true;
}
if (matrix[x][y] > target) {
--y;
} else {
++x;
}
}
return false;
}
}
共以下 9 个回答
“`java
class Solution {
public boolean findTargetIn2DPlants(int[][] plants, int target) {
//右下角一定是最大的植物,从右下角的开始往左上角找,一旦target大于对角线上的某个值,则target就位于当前值的右侧或下侧
if (plants == null || plants.length == 0) {
return false;
}
int i = 0;
int j = plants[0].length – 1;
while (j >= 0 && i < plants.length) { if (plants[i][j] > target) {
j–;
} else if (plants[i][j] < target) { i++; } else { return true; } } return false; } }
时间复杂度O(logn)
时间复杂度:O(m+n)
空间复杂度:O(1)
时间复杂度O(logmn)
暴力
时间:O(mn)
空间:O(1)
Z形查找
时间:O(m+n)
空间:O(1)
思路在代码中
“`C++=0)
bool findNumberIn2DArray(int** matrix, int matrixSize, int* matrixColSize, int target){
if(matrix==NULL||matrixSize==0||matrixColSize[0]==0)
{
return 0;
}
int i = 0;
int j = matrixColSize[0]-1;
while(i
{
if(matrix[i][j]==target)
{
return 1;
}
if(matrix[i][j]>target)
{
j–;
continue;//不加continue可能会出现两次判断都进行,且也可能在第二次判断出现越界情况
}
if(matrix[i][j]