剑指offer 文档 【4.二维数组的查找】

思路

一边更小一边更大
从右上开始,左边的越来越小,下边的越来越大

尝试解题

输入二维数组
右上角 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类型的变量

最终解答

  1. 边界
  2. 找到右上点
  3. 判断后移动
  4. 找到/没找到
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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值