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

二维数组中的查找

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;
            
    }
}

全部评论

相关推荐

湫湫湫不会java:1.在校经历全删了2.。这些荣誉其实也没啥用只能说,要的是好的开发者不是好好学生3.项目五六点就行了,一个亮点一俩行,xxx技术解决,xxx问题带来xxx提升。第一页学历不行,然后啥有价值的信息也没有,到第二页看到项目了,第一个项目九点,第二个项目像凑数的俩点。总体给人又臭又长,一起加油吧兄弟
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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