|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- length_y,length_x=map(int,input().split())
- lis=[]
- for i in range(length_y):
- lis.append([])
- lis1=list(map(int,input().split()))
- lis[i].append(lis1)
- target=int(input())
- flag=0
- y=0
- x=length_x-1
- while flag==0:
- if y<length_y and x<length_x:
- if lis[y][x]==target:
- flag=1
- break
- elif lis[y][x]<target:
- y+=1
- elif lis[y][x]>target:
- x-=1
- if flag==1:
- print((x+1),(y+1))
- elif flag==0:
- print('NOT FOUND')
复制代码
题目
不重复二维有序列表的线性查找。现在需要高效地查找一个二维列表中的某一个元
素 target,其中,这个二维列表具有如下三个特点:(1)每一个列表的顺序是从小到
大;(2)将这些列表排成一个二维矩阵之后,同一列上的元素从上到下依次递增;(3)
所有元素不重复。例如一个如下的二维列表:
现在需要充分利用这个排序二维列表的“有序”这一特性,实现一次高效的查找。
注意到一定是可以通过【二维的循环】,实现一个【循环所有元素】的暴力查找的,但
是可以利用有序这个特点,【最多只遍历一行和一列元素】找到目标 target 或者判断该
元素不在列表中。请实现后面这个高效的算法。
输入:
输入共三部分,第一部分为一行,包括以空格分割的两个整数 length_y 和 length_x
(两个数字都保证大于 1),表示子列表的个数和每个子列表的长度;
第二部分有 length_y 行,每一行包括 length_x 个整数,每一行的列表元素用空格
7
分隔,所有第二部分的整数排列按照题目要求有序;
第三部分为一个整数,为待查找整数 target。
输出:
若这个整数在二维列表中,则输出以空格分隔的两个正整数,分别表示在第几行、
第几列找到了这个元素;
若这个整数不在此二维列表中,则输出”NOT FOUND”。
输入样例 1
3 4
1 2 3 4
5 6 7 8
10 11 12 15
11
输出样例 1
3 2
输入样例 2
3 4
1 2 3 4
5 6 7 8
10 11 12 15
9
输出样例 2
NOT FOUND
输入
3 4
1 2 3 4
5 6 7 8
10 11 12 15
11
显示lis[y][x]==target出错 |
|