二维数组查找

题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
即实现函数:

public boolean Find(int target, int [][] array) {}

思路

  1. 对每一行做二分查找
  2. 从左下角元素开始(因为这个位置的元素有确定的增大和减小方向,也可以是右上角),若目标比之小则上移一步,若目标比之大则左移一步

解法1

public boolean Find(int target, int [][] array) {
        for(int i=0;i<array.length;i++){
            if(biDivSearch(array[i],target,0,array[i].length-1))
                return true;
        }
        return false;
    }
    public boolean biDivSearch(int[] array,int target,int begin,int end){
        if(begin>end)
            return false;
        int mid = (begin+end)/2;
        if(array[mid]==target)
            return true;
        else if(array[mid]>target)
            return biDivSearch(array,target,begin,mid-1);
        else
            return biDivSearch(array,target,mid+1,end);
    }

解法2

public boolean Find(int target, int [][] array) {
        int col = 0;
        int row = array.length-1;
        while(col<array[0].length && row>=0){
            if(array[row][col]==target)
                return true;
            if(array[row][col]>target)
                row --;
            else if(array[row][col]<target)
                col ++;
        }
        return false;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样...
    lkkwxy阅读 2,256评论 0 1
  • 题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输...
    AceCream佳阅读 2,985评论 0 0
  • 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序...
    lazydecoder阅读 3,064评论 0 0
  • 有序二维数组查找问题 问题描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺...
    第四风111阅读 1,306评论 0 2
  • 题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,...
    鸿雁长飞光不度阅读 1,661评论 0 0

友情链接更多精彩内容