剑指offer-JZ1 二维数组中的查找

难度:中等

知识点:数组

题目描述:

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

解题思路:

最容易想到的就是直接两层for循环嵌套进行遍历,但是这样子就没有用到题目中所给的递增信息。

所以换个思路,先拿边界元素来与整数进行比较,再根据两个递增的特性,分别判断,如果元素比整数小,证明一定不在元素所在的列,如果元素比整数大,证明一定不在元素所在的行,然后进行递归。

# -*- coding:utf-8 -*-
class Solution:
    # array 二维列表
    def Find(self, target, array):
        # write code here
        
        # 初始化行号和列号
        row_count = len(array)
        i = 0
        col_count = len(array[0])
        j = len(array[0]) - 1   #是index
        while i < row_count and j >= 0 :
            value = array[i][j]
            if value == target:
                return True
            if value > target:
                j -= 1
            else:
                i += 1
        return False   
    # 时间复杂度为 O(m+n) 
            
        '''
        for i in range (len(array)):
            for j in range (len(array[0])):
                if target == array[i][j]:
                    return True
        return False  # 此时的时间复杂度为O(mn)
    '''
原文地址:https://www.cnblogs.com/LLLLgR/p/15017678.html