在一个二维数组中(每个一维数组的长度相同),且数据每一行从左到右递增,从上到下递增。请编写一个函数,输入一个二维数组和一个整数,判断数组中是否有此整数。

分析:如果从左上角第一个数开始的话,往右和往下数都比它大,假设已给的数比它大的话,它不知道该从哪个方向搜索;若从左下角开始的话,往上搜索是比它小的数,往右搜索是比它大的数,故从这个数开始搜索比较好;右上角和右下角以此类推,故选择左下角和右上角是最好的策略。以右上角为例,代码如下:

public class Solution {
    public boolean Find(int target, int [][] array) {
        if(array.length==0 || array[0].length==0)
            return false;
        int m = array[0].length-1;
        int n = 0;
        int temp = array[n][m];
        while(target != temp){
            if(m>0 && n<array.length-1){
                if(target>temp){
                    n = n + 1;
                }else if(target<temp){
                    m = m - 1;
                }
                temp = array[n][m];
            }else{
                return false;
            }
        }
        return true;
    }
}

 原文地址:https://www.weiweiblog.cn/find2array/