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


思路
数组是有序的,每行递增,每列递增,所以可以取右上角或者左下角,如果从左下角开始查找,当要查找数字比左下角数字大时,右移;要查找数字比左下角数字小时,上移。同理当从右上角开始查找时,当要查找数字比右上角数字大时,下移;要查找数字比右上角数字小时,左移。


代码实现

# -*- coding:utf-8 -*-
# 从右上角开始查找
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        rows = len(array)
        cols = len(array[0])        
        temp_rows = 0
        temp_cols = cols-1
        while(temp_rows<=rows-1 and temp_cols>=0):
            if(array[temp_rows][temp_cols] == target):
                return True
            elif(array[temp_rows][temp_cols]<target):
                temp_rows+=1
            elif(array[temp_rows][temp_cols]>target):
                temp_cols-=1
        return False
# -*- coding:utf-8 -*-
# 从左下角开始查找
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        left = 0
        right = len(array[0])-1
        top = 0
        bottom = len(array)-1

        while(top<=bottom and left<=right):
            select_num = array[bottom][left]
            if(select_num == target):
                return True
            elif(target > select_num):
                left+=1
                continue
            elif(target < select_num):
                bottom-=1
                continue
        return False