题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
答案:
答案思路:从数组的右上角开始,当target值大于对应值时,切换到下一行,当target小于对应值时,取值向左边移动,如此循环直至找到target
# -*- coding:utf-8 -*-
class Solution:
def Find(self, target, array):
if array == [] or array == [[]]:
return False
rawnum = len(array)
print rawnum
colnum = len(array[0])
if type(target) == float and type(array[0][0]) == int:
target = int(target)
elif type(target) == int and type(array[0][0]) == float:
target = float(int)
elif type(target) != type(array[0][0]):
return False
i = colnum - 1
j = 0
while i >= 0 and j < rawnum:
if array[j][i] < target:
j += 1
elif array[j][i] > target:
i -= 1
else:
return True
return False
简单测试:
import numpy as np
array = np.array(([1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]))
def find(array,rows,cols,key):
found = False
if array.size != 0 and rows > 0 and cols > 0:
row = 0
col = cols-1
while row < rows and col >= 0:
if key < array[row][col]:
col-=1
elif key > array[row][col]:
row+=1
else:
found = True
break
return found
print(find(array,4,4,2))