题目:
一个矩阵从左到右值依次增大,从上到下依次增大,现在给你一个数,如果矩阵中存在这个数则返回位置,否则返回-1
分析:
1 4 5 7 9
2 6 8 9 10
4 7 9 11 12
假如给出以上二维数组,由于每行是递增的,每列也是递增的,因此从右上角的“9”开始查找。如果target=9,则直接返回右上角位置;如果target>9,当前9所在的行都是比9小的,当前行可以删掉不考虑;如果target<9,当前9所在的列都是比9大的,当前列可以删掉不考虑。
代码:
def find_val(arr, target, row_start, col_end):
if row_start >= len(arr) or col_end < 0:
return -1
pivot = arr[row_start,col_end]
if target == pivot:
return (row_start,col_end)
elif target > pivot:
return find_val(arr, target, row_start+1, col_end)
else:
return find_val(arr, target, row_start, col_end-1)
if __name__ == '__main__':
arr = np.array([[1,4,5,7,9], [2,6,8,9,10], [4,7,9,11,12]])
print(find_val(arr, 19, 0, 4))