您的位置:首页 > 编程语言 > Python开发

【LEETCODE】74-Search a 2D Matrix [Python]

2016-01-07 16:04 447 查看
Write an efficient algorithm that searches for a value in an
m x n matrix. This matrix has the following properties:

Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.

For example,
Consider the following matrix:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
Given target = 3, return
true.

题意:
写一个有效的算法 在 m x n 矩阵中查找某值是否存在
在这个矩阵中,每一行都是从左到右排好的
每行的第一个整数 都比前一行的最后一个整数要大

思路:
先用 target 和各行的第一个元素比较,以锁定搜索的行 row
然后在 row 那行进行搜索,遇到相等则true,遇到小的则前进,前面都是小的后一步遇到大的,说明false,一行都比较了还没有也是false

方法2: 二分查找 http://www.cnblogs.com/zuoyuan/archive/2014/06/05/3770061.html
Python
class Solution(object):
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""

row=0
m=len(matrix)
n=len(matrix[0])

if target>=matrix[m-1][0]:<span style="white-space:pre">		</span>#先用 target 和各行的第一个元素比较,以锁定搜索的行 row
row=m-1
else:
for i in range(len(matrix)):
if target<matrix[i][0]:
row=i-1
break
if row<0:
return False

j=0<span style="white-space:pre">					</span>#在 row 那行进行搜索
while j<n:
if matrix[row][j]==target:
return True
elif matrix[row][j]>target:
return False
else:
j+=1

return False
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: