LeetCode第74题,注意此题和剑指offer面试题3、数组----二维数组中数的查找2中的题条件是不一样的。
解题思路参考 [LeetCode] Search a 2D Matrix 搜索一个二维矩阵
题目:
写出一个有效算法,查找一个m*n的二维数组,返回True或False。数组有如下性质:
- 每一行的整数都从小到大的有序列表
- 每一行的第一个整数都比前一行的最后一个整数要大
例子:
一、思路
- 注意到此数组的性质,此数组平铺成一个一维数组的话,那就是一个有序数组,可以用二分法进行查找。
- 于是剩下的问题就是怎么把数组平铺成一个一维数组了。python中是比较方便的,直接把两个list相加就行。
二分法参考笔记搜索与排序笔记
二、代码思路
2.1,功能上
- 以二分法为基础,按照二分法的步骤写代码就行了:设置左右指针,从中间选择元素,比较大小,根据三种情况,决定下一步,循环一直到找到target。
- 考虑两种情况,找到target返回True,找不多返回False。
2.3,特殊输入测试
输入一个空列表。
class Solution:
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
#若输入为一个空列表,返回False
if not matrix:
return False
#把matrix平铺成一个一维数组
list_flat = []
for item in matrix:
list_flat += item
#一维有序数组构成,采用二分法查找target
found = False
left = 0
right = len(list_flat) - 1
while left <= right and not found:
mid = (left + right)//2
if list_flat[mid] == target:
found = True
elif list_flat[mid] > target:
right = mid - 1
else:
left = mid + 1
return found