二维数组中的查找

这是剑指Offer的第一道题目。 2星难度。

要利用好每行每列元素有序这个点。

思路很重要,暴力解法不可取。O(m*n)

而通过借鉴类似图片放大缩小的手法,可以将最大复杂度降到O(m+n)
我为这种方法起了一个名字: 【对角元素限制法】

见名之意,日后遇见类似二维数组中查找的题目,可借鉴对角元素限制法。

public class Solution {
    public boolean Find(int target, int [][] array) {
//做好特殊情况的处理是所有题解的第一步。
        int m=array.length;
        if (m==0) return false;
        int n=array[0].length;
        if(n==0) return false;
//二维数组中,r是行,c是列。
        int r=0,c=n-1;
        while(r<m&&c>=0){
            if(target==array[r][c]) return true;
//通过对二维图像角的拉缩来进行候选集的过滤。
            if(target>array[r][c]) {
                r++;
            }else c--;
        }
    return false;
    }
}