剑指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) '''