剑指offer 二维数组中的查找

题目描述

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

思路:自己只可以想到就是暴力搜索和利用每行进行二分搜索(但是不记得二分搜索的终止条件了),因此最后只用了一种方法实现

自己的解法(采取的是暴力搜索)

public class Solution {
    public boolean Find(int target, int [][] array) {
         boolean a1=false;
         for(int i=0;i<array.length;i++){
             for(int j=0;j<array[i].length;j++){
                 if(array[i][j]==target){
                     a1=true;
                     break;
                 }
                
             }
         }
         return a1;
    }
}

参考到的更佳的解法(从左下角开始搜索,如果大于目标值则往上走,小于目标值则往右走)

链接:https://www.nowcoder.com/questionTerminal/abc3fe2ce8e146608e868a70efebf62e
来源:牛客网
 

public class Solution {

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

        int len = array.length - 1;

        int i = 0;

        while((len >= 0) && (i < array[0].length)){

            if(array[len][i] > target){

                  len--;

            }else if(array[len][i] < target){

                i++;

            }else{

                return true;

            }       

        }

        return false;

    }

}

二分搜索解法(参考别人的)

public class Solution {

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

         

        for(int i=0;i<array.length;i++){

            int low=0;

            int high=array[i].length-1;

            while(low<=high){//自己写的时候忘记了这个

                int mid=(low+high)/2;

                if(target>array[i][mid])

                    low=mid+1;

                else if(target<array[i][mid])

                    high=mid-1;

                else

                    return true;

            }

        }

        return false;

 

    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值