题目描述
- 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 考点:数组
- 关键字:1、行和列均排好序;2、M*N
解题思路
- 相当暴力了
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
if len(array)==0 or len(array[0])==0:
return False
for i in range(len(array)):
for j in range(len(array)):
if array[i][j] == target:
return True
return False
- 找规律:
从右上角开始寻找,如果查找数大于第k行最后一个数,说明查找的数比第k行的任何一个数都大,所以进入下一行查找;倘若找到某p行,发现第p行的最后一列的数要大于查找的数,那么说明该数可能存在于p行,现有两种可能:1、找到并返回;2、没找到,则进入第p+1行
时间O(m+n),空间O(1)
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
if not array:
return False
rows, columns = len(array), len(array[0])
r = 0
c = columns - 1
while (r < rows and c >= 0):
if array[r][c] == target:
return True
elif array[r][c] >= target:
c -= 1
else:
r += 1
return False