240. 搜索二维矩阵 II
原始题目链接:https://leetcode-cn.com/problems/search-a-2d-matrix-ii/
编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:
每行的元素从左到右升序排列。
每列的元素从上到下升序排列。
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false
解题思路:
两种方法,二分查找,或者从右上角开始查找(根据数组的特点,从左到右递增,从上到下递增)。
代码实现:
方法1:
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
# 每一行从右到左是递减的,从上到下是递增的
# 从右上角开始查找,比target小的换下一行
# 比target大,往左换一列
row, col = len(matrix), len(matrix[0])
m, n = 0, col - 1
while m < row and n >= 0:
if matrix[m][n] == target:
return True
elif matrix[m][n] < target:
m += 1
else:
n -= 1
return False
方法2:
class Solution:
def searchMatrix(self, matrix: List[List[int]], target: int) -> bool:
for row in matrix:
# row是二维矩阵中的每一个列表,二分查找
index = bisect.bisect_left(row, target)
if index < len(row) and row[index] == target:
return True
return False
参考文献:
https://leetcode-cn.com/problems/search-a-2d-matrix-ii/solution/sou-suo-er-wei-ju-zhen-ii-by-leetcode-so-9hcx/