剑指Offer 1. 二维数组中的查找 (数组)

Posted on 2018-10-11 21:15  _hqc  阅读(142)  评论(0编辑  收藏  举报

题目描述

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

题目地址

https://www.nowcoder.com/practice/abc3fe2ce8e146608e868a70efebf62e?tpId=13&tqId=11154&tPage=1&rp=2&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking

思路

由于数组是有序的,从左下角看,向上为递减,向右为递增,因此可以从左下角开始查找,当左下角元素比整数大时,上移,当左下角元素比整数小时,右移。

Python

# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self,target, array):
        if not array:
            return False
        rows, cols = len(array), len(array[0])
        row, col = rows-1, 0
        while row >= 0 and col < cols:
            if array[row][col] == target:
                return True
            elif array[row][col] > target:
                row -= 1
            else:
                col += 1
        return False

if __name__ == '__main__':
    result = Solution().Find(5,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]])
    print(result)