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

package SwordOffer;

/**
 * @author jinhuajian
 * @data 2018年12月26日---下午10:58:20
 * @blog https://me.csdn.net/qq_37119939
 */
public class Solution_01 {
	public boolean Find_1(int target, int[][] array) {
		if (array == null || array.length == 0) {
			return false;
		}
		int rowL = array.length - 1, colL = array[0].length, i = 0;
		while (rowL >= 0) {
			while (i != colL) {
				if (array[rowL][i] == target) {
					return true;
				} else if (array[rowL][i] < target) {
					i++;
				} else
					break;
			}
			rowL--;
		}
		return false;
	}

	public boolean Find(int target, int[][] array) {
		// 从右上角,如果大于则往下,如果小于则往左
		// 从左下角,如果大于则往右,如果小于则往上
		if (array == null || array.length == 0) {// int[][]
			return false;
		}
		int rowL = array.length, colL = array[0].length - 1;
		for (int i = 0; i != rowL; i++) {// 左上角
			while (colL >= 0) {
				if (target == array[i][colL]) {
					return true;
				} else if (target > array[i][colL]) {
					break;
				} else
					colL--;
			}
		}
		return false;
	}

	public static void main(String[] args) {
		Solution_01 s = new Solution_01();
		int aim = 10;
		int[][] array = new int[4][4];

		int c = 0;
		for (int i = 0; i != array.length; i++) {// 左上角
			for (int j = 0; j != array[0].length; j++) {
				array[i][j] = c++;
			}
		}
		for (int i = 0; i != array.length; i++) {// 左上角
			for (int j = 0; j != array[0].length; j++) {
				System.out.print(array[i][j] + " ");
			}
			System.out.println();
		}
		boolean res = s.Find(aim, array);
		System.out.println(res);
	}
}

python版

class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        m = len(array)
        while(m>=0):
            m-=1
            for i in range(len(array[m])):
                if array[m][i] > target:
                    break
                if array[m][i] == target:
                    return True
        return False