题解 | #二维数组中的查找#

二维数组中的查找

http://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e

第一种方法比较暴力,其实就是顺序遍历,当遇到 target > 目标值的时候则break,节约时间。
public class Solution {
    public boolean Find(int target, int [][] array) {
        int jmax = array.length;
        
        if(jmax <= 0){
            return false;
        }
        int imax = array[0].length;
        if(imax <= 0){
            return false;
        }
        
        for(int j=0; j < jmax; j++)
        {
            int row[] = array[j];
            
            if(row[0] > target){
                break;
            }
            
            for(int i = 0; i < imax; i++)
            {
                if(row[i] == target){
                    return true;
                }else if(target < row[i]){
                    break;
                }
            }
        }
        return false;
            
    }
}
第二种就是利用其的规律,根据题目可知左上角是最小值,右下角为最大值。
那么左下角的值就有一个规律,其上方的值会比它小,其右方的值比它大。
那么就可以从左下角出发,和target对比,如果target比它大,则右移,比它小则上移。
public class Solution {
    public boolean Find(int target, int [][] array) {
        int jmax = array.length;
        
        if(jmax <= 0){
            return false;
        }
        int imax = array[0].length;
        if(imax <= 0){
            return false;
        }
        
        for(int i=0,j=jmax-1; i < imax & j >= 0;)
        {
            if(target > array[j][i]){
                i++;
            }else if(target < array[j][i]){
                j--;
            }else{
                return true;
            }
        }
        return false;
            
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-19 17:02
鼠鼠深知pdd的强度很大,但是现在没有大厂offer,只有一些不知名小厂我是拒绝等秋招呢,还是接下?求大家帮忙判断一下!
水中水之下水道的鼠鼠:接了再说,不图转正的话混个实习经历也不错
投递拼多多集团-PDD等公司10个岗位 >
点赞 评论 收藏
分享
04-28 11:34
西北大学 运营
牛客4396号:不好意思,这个照片猛一看像丁真
点赞 评论 收藏
分享
每晚夜里独自颤抖:把华北改为华南再试一试,应该就没啥问题了。改完可能都不用投,别人主动联系了。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务