1、问题描述
在一个二维数组中,数组中的每一行从左到右递增排序,数组中的每一列从上到下递增排序,输入这样一个二维数组和整数,判断这个二维数组中是否存在该整数。
2、解题思路
- 边界条件:二维数组为空。
- 思路1:由于这个数组有这样的一个特征,行和列都是按照递增进行排列的,所以位于数组右上角的元素m,会大于同一行的并且在它左边的所有元素X,会小于同一列的并且在它下边的所有元素Y,这就相当于把由X、Y和m构成的有序数组从m所在的位置折了90°(左下角的情况相反)。所以,借鉴二分查找的思路,在查找整数K时,首先选取数组的右上角的元素和整数K进行比较,如果选取的数大于K,则在与选取的数同一行的左边部分进行查找,如果选取的数小于K,则在与选取的数同一列的下边部分进行查找。如果等于K,则停止查找。重复该操作,直到找到该整数或找不到为止。
3、代码实现
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
if len(array)!= 0:
row = 0
col = len(array[0]) - 1
while row < len(array) and col >= 0:
if array[row][col] == target:
return True
elif target < array[row][col]:
col = col - 1
else:
row = row + 1
return False