剑指 Offer 04. 二维数组中的查找

这篇博客探讨了如何在二维数组中查找特定目标值。作者分享了两种策略,一种是从左下角开始,另一种是从右上角开始。这两种方法都利用了数组的升序性质来优化搜索过程。在第一种方法中,从左下角开始,如果目标值小于当前元素则向上移动,否则向右移动。第二种方法中,从右上角开始,如果目标值大于当前元素则向下移动,否则向左移动。这两种方法都能在适当的情况下提高查找效率。
摘要由CSDN通过智能技术生成

剑指 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);

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值