二维数组的查找(牛客网)

一、题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
二、我的思路:
在这里插入图片描述
设计思路:
从第一行到最后一行起,每一行都是:
先用二分查找找到本行比target小的数字,然后这个数字右边的所有列都比target大,故去除;
即程序中的i1 = binarySearch(target,array[i2],0,i1);(i1即是下一行查找的列的范围最右边)
这一行target左边的数字都比target小,也去除。
即程序中的i2=i2+1;(即下一列)
三、代码

/**
 * @ClassName Search01
 * Description TODO
 * @Auther 青青子衿
 * @Date 2019/8/8 10:24
 */
public class Search01 {

    public static int binarySearch(int target,int[] array, int start, int end){
        if(target>array[end]){
            return end;
        }
        int middle=0;
        while(start<=end){
            middle = (start+end)/2;
            if(array[middle]==target){
                return middle;
            }else if(array[middle]<target){
                start = middle+1;
            }else{
                end = middle-1;
            }
        }
        if(start>middle){
            return middle;
        }
        if(end<middle){
            return middle-1;
        }
        return -100;
    }

    public static boolean Find(int target, int [][] array) {
        int n1 = array[0].length;
        int n2 = array.length;
        //判断是否在二维数组范围内
        if (n1==0||n2==0) {
            return false;
        }
        if(target<array[0][0]||target>array[n2-1][n1-1]){
            return false;
        }
        int i1=n1-1, i2 = 0;
        while(i1>=0&&i2<=n2-1){
            i1 = binarySearch(target,array[i2],0,i1);
            if(i1>=0&&i2<=n2-1&&target==array[i2][i1]){
                return true;
            }
            i2=i2+1;
        }
        return false;
    }

    public static void main(String[] args){
        int[][] array ={{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}};
//        int[][] array ={{}};
        System.out.println(Find(5,array));
    }
} 

去看了看别人的思路,发现人家的思路比我的明了许多。
https://blog.csdn.net/alidada_blog/article/details/82494856

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值