思路分析
例如我们寻找7,如果从左上角开始寻找,7比1大,可能在1的右边,也可能在下面几列。有两条路可以走都有可能,且思路复杂。如果从右下角开始寻找同理。
【正确思路】
我们可以从右上角或左下角开始寻找。
【注意】r为行,c为列
【右下角】
如果num > arr[r][c],c++
如果num < arr[r][c],r--;
如果num = arr[r][c],直接返回
【右上角】
如果num > arr[r][c],r++
如果num < arr[r][c],c--;
如果num = arr[r][c],直接返回
2.代码
public class Test {
public static void find_val1(int [][]arr,int row,int col,int num) {
int r = row;
int c = 0;
while(r >= 0 && c <= col) {
if(num < arr[r][c]) {
r--;
}else if(num > arr[r][c]) {
c++;
}else {
System.out.println("找到了" + num + ",在第" + (r+1) + "行第" + (c+1) + "列");
return;
}
}
System.out.println("找不到这样的数字");
}
public static void find_val2(int [][]arr,int row,int col,int num) {
int r = 0;
int c = col;
while (r <= row && c >= 0) {
if(num < arr[r][c]) {
c--;
}else if(num > arr[r][c]) {
r++;
}else {
System.out.println("找到了" + num + ",在第" + (r+1) + "行第" + (c+1) + "列");
return;
}
}
System.out.println("没有这样的数字");
}
public static void main(String[] args) {
int [][]array = {
{1,2,8,9},
{2,4,9,12},
{4,7,10,13},
{6,8,11,15}
};
find_val2(array,3,3,10);
}
}