python求解矩阵搜索问题,矩阵中每一行和第一列都是递增的-给定一个元素查找矩阵中是否存在该元素
目录
python求解矩阵搜索问题,矩阵中每一行和第一列都是递增的 给定一个元素查找矩阵中是否存在该元素
矩阵搜索问题,给定一个矩阵,矩阵中的而每一行都是递增的,第一列也是递增的,其余信息未知,给定一个元素查找矩阵中是否存在该元素,乍眼一看跟矩阵中行列都是递增的题目一样,其实不然,这里只有第一列是递增的其余都是不知道的,所以就不能按照行列都是递增的方法来做了
这里简单说一下自己的思路,如下这个矩阵:
1 3 15 17 19
2 4 16 17 22
3 4 21 44 51
6 7 18 29 36
方法是:题目中说的是每行都是递增的,那么可以知道每行最后一个值是最大的,那么我先抽取出来每行最大值即最后一个值,之后遍历一次与给定的数字对比,找出比给定数字大的或者相等的行索引,这些是需要遍历判断的,其余的就不需要考虑了,暂时没理解第一列也是递增的是什么意思有什么用处,下面是具体实现:
#!usr/bin/env python
#encoding:utf-8
'''
__Author__:沂水寒城
功能:矩阵搜索问题,给定一个矩阵,矩阵中的而每一行都是递增的,第一列也是递增的
其余信息未知,给定一个元素查找矩阵中是否存在该元素
'''
def matrix_search(matrix, num):
'''
矩阵搜索
'''
last_col_list=[one_list[-1] for one_list in matrix]
index_list=[]
for i in range(len(last_col_list)):
if last_col_list[i]>=num:
index_list.append(i)
flag=False
res_list=[]
while index_list:
one_row=index_list.pop()
one_list=matrix[one_row]
if num in one_list:
tmp_str='Row:{0},Col:{1}'.format(one_row,one_list.index(num))
res_list.append(tmp_str)
flag=True
if flag:
print '{0} Exists in {1}'.format(num, res_list)
else:
print '{0} No Exists!'.format(num)
if __name__ == '__main__':
matrix=[[1,3,15,17,19],
[2,4,16,17,22],
[3,4,21,44,51],
[6,7,18,29,36]]
for i in range(4):
one_list=map(str, matrix[i])
print ' '.join(one_list)
num_list=[15,12,21,29,19]
for one_num in num_list:
matrix_search(matrix, one_num)
结果如下:
1 3 15 17 19
2 4 16 17 22
3 4 21 44 51
6 7 18 29 36
15 Exists in ['Row:0,Col:2']
12 No Exists!
21 Exists in ['Row:2,Col:2']
29 Exists in ['Row:3,Col:3']
19 Exists in ['Row:0,Col:4']
[Finished in 0.3s]