二维数组中的查找

来源:互联网 发布:深圳方维网络 编辑:程序博客网 时间:2024/05/21 22:36

我的代码:

public class Solution {    public boolean Find(int target, int [][] array) {         boolean rtn=false;        if(array==null||array.length==0||(array.length==1&&array[0].length==0))            return false;//target = {{}}的情况        for(int i=0;i<array.length;i++){            if(array[i][0]<=target){                if(erfen(array,target,i)){                    rtn=true;                    break;                }            }            else                break;        }       return rtn;    }   public  boolean erfen(int s[][],int taget,int i){        int max=s[i].length-1;        int min=0;        while(max>=min){            int mid = (max+min)/2;            if(taget >s[i][mid]){                min = mid+1;            }            else if(taget <s[i][mid]){                max = mid - 1;            }            else                return true;        }        return false;    }}

大牛代码

/*两种思路一种是:把每一行看成有序递增的数组,利用二分查找,通过遍历每一行得到答案,时间复杂度是nlogn*/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;    }} /*另外一种思路是:利用二维数组由上到下,由左到右递增的规律,那么选取右上角或者左下角的元素a[row][col]与target进行比较,当target小于元素a[row][col]时,那么target必定在元素a所在行的左边,即col--;当target大于元素a[row][col]时,那么target必定在元素a所在列的下边,即row++;*/public class Solution {    public boolean Find(int [][] array,int target) {        int row=0;        int col=array[0].length-1;        while(row<=array.length-1&&col>=0){            if(target==array[row][col])                return true;            else if(target>array[row][col])                row++;            else                col--;        }        return false;    }}

差距巨大。。