技术交流可以加:
本人微信:xcg852390212
本人qq:852390212
学习交流qq群1(已满): 962535112
学习交流qq群2: 780902027
搜索二维矩阵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
。
给定 target = 20
,返回 false
。
解答
根据二维矩阵的排序规律,从矩阵的右上角开始搜索矩阵元素matrix[i][j]
:
- 如果
target > matrix[i][j]
,i++
往下移动一行; - 如果
target < matrix[i][j]
,j--
往左移动一行; - 否则,找到
target
。
设二维矩阵的行数为m,列数为n
- 时间复杂度:O(m + n)
- 空间复杂度:O(1)
C++代码
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if(matrix.empty())
return false;
int row = matrix.size();
int col = matrix[0].size();
int i = 0;
int j = col-1;
while(i < row && j >= 0)
{
if(target > matrix[i][j])
{
i++;
}
else if(target < matrix[i][j])
{
j--;
}
else
return true;
}
return false;
}
};
Python代码
class Solution:
def searchMatrix(self, matrix, target):
"""
:type matrix: List[List[int]]
:type target: int
:rtype: bool
"""
if len(matrix) == 0:
return False
m,n = len(matrix),len(matrix[0])
i,j = 0,n - 1
while i < m and j >= 0:
if target < matrix[i][j]:
j -= 1
elif target > matrix[i][j]:
i += 1
else:
return True
return False