题目难度:middle
题目描述:
给你一个满足下述两条属性的
m x n
整数矩阵:
- 每行中的整数从左到右按非严格递增顺序排列。
- 每行的第一个整数大于前一行的最后一个整数。
给你一个整数
target
,如果target
在矩阵中,返回true
;否则,返回false
。示例 1:
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3 输出:true示例 2:
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13 输出:false
解题思路:
本题需要充分利用题目给出的两个条件,条件一:本题中的每行整数从左到右是递增的 条件二:本题中的下一行的第一个数大于上一行的最后一个数,因此我们可以得出这样一个结论:每一行之间都存在严格的单调递增,因此我们需要找到目标值只需要先确定目标值位于第几行即可,而判断其位于第几行只需要判断目标值是否小于当前行的最后一个值即可,在确定好目标值位于第几行后即可在当前行查找是否存在目标值即可(查找这里可以使用二分查找法提高查找效率,这里我偷个懒就不使用二分查找)。
代码实现如下:
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int line = -1,n=matrix.size(),m=matrix[0].size();
for(int i=0;i<n;i++){
if(matrix[i][m-1] >= target){
line = i;
break;
}
}
if(line == -1) return false;
for(int i=m-1;i>=0;--i)
if(matrix[line][i] == target) return true;
return false;
}
};
提交效果如下: