思路
一边更小一边更大
从右上开始,左边的越来越小,下边的越来越大
尝试解题
输入二维数组
右上角 arr[0][j-1]
边界
cur= arr[0][j-1]
if(cur > tar) cur = arr[ 0-1][j-1]
if(cur < tar) cur = arr[0][j-1 -1]
if(cur > tar && cur > arr[ 0-1][j-1]) cur = arr[ 0-1][j-1] //左走
arr[ 0-1][j-1]到头了
if(cur < tar) cur = arr[0][j-1 -1]
困难 + 解决
1.输入
Scanner scan = new Scanner(😳System.in);
int c = scan.😳nextInt();
int r = scan.nextInt();
int[][] matrix = new 😳int[c][r];
for(int i=0;i<😳r;i++){
for(int j=0;j<😳c;j++){
maxtir[i][j] = scan.nextInt();
}
}
2.边界
数组:
array == null;
x array.length = 0; √ ==0
array[0].length ==0;
i行j列
调用b.length方法,返回的则是b数组的行数,
如果是b[0].length方法则返回的是0行所代表的长度
int rows = arr.length;
int cols = arr[0].length;//第0行的长度,也就是列数
if(rows == 0){return false;}
if(cols == 0){return false;}
- 空matrix边界未解决
3.横纵-1,当前i,j怎么表示
rows总 row当前
int row = 0;
int col = cols-1;
x int cur = arr[row][col]; //要让row 或 col变化,所以要存储整个数组,不用cur了
4.arr[ 0-1][j-1]到头了/arr[0][j-1 -1]到头了
x while(row<=rows || col>=0)
√ while(row<rows && col>=0)
一边找到头了,还没符合条件,return false
5.比较
x if(cur<tar) cur = arr[]
√
if(arr[row][col]<tar) row–; // 剩下>,=
else if(arr[row][col]>tar) col++;
else return;
6.显示:
😳System.out.print(Find(8,matrix));
Find(8,matrix)是boolean类型的变量
最终解答
- 边界
- 找到右上点
- 判断后移动
- 找到/没找到
public class Solution {
public boolean Find(int target, int [][] array) {
if(array==null||array.length==0||array[0].length==0){
return false;
}
int cows = array.length;
int rows = array[0].length;
int cow = 0;
int row = rows-1;
while(cow<cows && row>=0){
if(array[cow][row] < target){
cow++;
}else if(array[cow][row] > target){
row--;
//return true;
}else{
return true;
}
}
return false;
}
}