题目:74. Search a 2D Matrix
题目链接:https://leetcode.com/problems/search-a-2d-matrix/description/
给定二维数组,数组每一行均为升序,且每一行的第一个元素均小于上一行最后一个元素。在数组中查找target,返回True或者False。其实两次二分查找就可以找到了,第一次二分查找去定位target所在的行,第二次二分查找target。
Python:
import bisect
class Solution(object):
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
if matrix==[] or matrix==[[]]:
return False
rows=len(matrix)
cols=len(matrix[0])
top,bottom=0,rows-1
while top<=bottom:
mid=(top+bottom)//2
if matrix[mid][0]<=target and matrix[mid][cols-1]>=target:
#binsearch(matrix[mid],target)
pos=bisect.bisect_left(matrix[mid],target)
if pos<cols:
if matrix[mid][pos]==target:
return True
break
elif matrix[mid][0]>target:
bottom=mid-1
else:
top=mid+1
return False