查找、数组--二维列表查找
·
题目:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1、python
a、使用内值函数 for target in array[i],逐行遍历
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
t='true'
f='false'
for i in range(len(array)):
if target in array[i]:
return t
return f
while True:
try:
sin=list(eval(raw_input()))
s=Solution()
#print(sin)
target=sin[0]
array=sin[1]
print(s.Find(target,array))
except:
break
b、如果不使用 if target in array[i],思路有两条:
思路1、利用二维列表的大小顺序,从左下(右上)角开使逐行判断,若比左下角的数大,则向上移动一行再进行判断;若比左下角数据小,则向右移动,进行判断,有相等值则返回1,判断出更大的值则返回0 ,判断完一行,返回0
思路2:、逐行遍历,行内二分法查找
注意,在用python时,无法直接获取到二维列表的 维度,需要转换为矩阵,np.array(list_).shape()
思路1 代码
(m,n)=np.array(array).shape()
print(m,n)
i=0
for j in range(0,m):
if array[m-j,0]==target:
return 1
elif array[m-j,0]<target:
for i in range(0,n):
if array[m-j,i]==target:
return 1
elif array[m-j,i]>target:
return 0
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
t='true'
f='false'
m=len(array)
n=len(array[0])
for i in range(m):
for j in range(n):
if array[m-i-1][j]>target:
break
elif array[m-i-1][j]<target:
if j==(n-1):
return f
else:
continue
elif array[m-i-1][j]==target:
return t
return f
while True:
try:
sin=list(eval(raw_input()))
s=Solution()
#print(sin)
target=sin[0]
array=sin[1]
print(s.Find(target,array))
except:
break
思路2 代码
```python
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
t='true'
f='false'
for i in range(len(array)):#逐行遍历
l=0
h=len(array[0])-1#列数
while l<=h:
mid=(l+h)/2
if array[i][mid]<target :
l=mid+1
elif array[i][mid]>target :
h=mid-1
else:
return t
return f
while True:
try:
sin=list(eval(raw_input()))
s=Solution()
#print(sin)
target=sin[0]
array=sin[1]
print(s.Find(target,array))
except:
break
更多推荐



所有评论(0)