剑指 Offer 04. 二维数组中的查找
一开始想的是左上角开始但是左上角不管网上还是往右都是变大的没办法比较,所以只能选择左下角,或者右上角。
不知道为啥从左上角报错,心态崩了。左下角可以。
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
int i = matrix.length - 1, j = 0;
while(i >= 0 && j < matrix[0].length)
{
if(matrix[i][j] > target) i--;
else if(matrix[i][j] < target) j++;
else return true;
}
return false;
}
}
从右上角
class Solution {
public boolean findNumberIn2DArray(int[][] matrix, int target) {
if(matrix.length == 0){
return false;
}
int i = matrix.length, j = matrix[0].length;
int row = 0, col = j - 1;
while(row < i && col >= 0){
if(matrix[row][col] == target){
return true;
}
if(matrix[row][col] < target){
row++;
}else{
col--;
}
}
return false;
}
}
错误思路:没看清题
public static void main(String[] args)
{
int[][] matrix=new int[][]{
{1, 4, 7, 11, 15},
{2, 5, 8, 12, 19},
{3, 6, 9, 16, 22},
{10, 13, 14, 17, 24},
{18, 21, 23, 26, 30}};
int rows = matrix.length;//行数
int columns = matrix[0].length;//列数
int TEST=10;
int resulti=0;
int resultj=0;
int ii=0;
int jj=0;
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++){
if(matrix[i][j]==TEST){
System.out.println(matrix[i][j]);
resulti=i;
resultj=j;
break;
}
else if (matrix[i][j]>TEST){
System.out.println(matrix[i][j]);
ii=i;
jj=j;
break;
}
}
break;
}
System.out.println(ii);
System.out.println(jj-1);
// int result=56;
// ii=ii;
// jj=jj-1;
System.out.println(matrix[ii][jj]);
// for (int i2=ii;i2<rows;i2++){
// if(matrix[i2][jj]==TEST){
// System.out.println(matrix[i2][jj]);
// resulti=i2;
// resultj=jj;
// break;
// }
// result=0;
System.out.println(i2);
// }
// System.out.println(resulti);
// System.out.println(resultj);
}