题目描述

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路

首先要考虑三种情况:此时 target 肯定不在数组中,返回 false
1、数组为:[ ],对应 array.length == 0
2、数组为:[ [ ] ],对应 array[0].length == 0
3、数组未引用,传进来的是空,对应 array == null

二维数组可以看成是多个一维数组,假设数组大小为 array[3][5]
第一层 for 循环,在第一个一维数组内部进行查找:array[0]
如果 target >= array[0][0],那么在该一维数组内部查找,若找到返回 true

又因为每一列从上到下是递增的,如果 target 在上一行中未找到,又小于下一行的第一个值,那么直接返回 false:target不存在于此二维数组中。

若遍历了完整的数组而函数还没有 return,则说明 target 比数组中所有数都大,且不存在于数组中,返回 false

代码

public class Solution {
    public boolean Find(int target, int [][] array) {
        if(array.length==0 || array[0].length==0 || array==null) {
            return false;
        }
        for (int i = 0; i < array.length; i++) {
            if (target >= array[i][0]) {
                for (int j = 0; j < array[0].length; j++) {
                    if (array[i][j] == target) {
                        return true;
                    }
                }
            }
            else {
                return false;
            }
        }
        return false;
    }
}