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

二维数组中的查找

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

全部评论

相关推荐

服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务