week4(problem1)
题目
Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
For example,
Consider the following matrix:
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
Given target = 3, return true.
原题网址:https://leetcode.com/problems/search-a-2d-matrix/description/
解析
该题目较为简单,给出一个vector存放的二维数组,给定一个数,查找该数是否在该二维数组中。
注意到题目给出的数组的每行的数都是已经从小到大排列的了,因此可以检查每行的第一个数和最后一个数,与目标数比较大小,确定目标数有无可能在该行中,如果无可能则直接跳过该行的检索。
代码
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
for (int i = 0; i < matrix.size(); i++) {
/*记录该行元素个数*/
int s = matrix[i].size();
/*数组有可能为空*/
if (!matrix[i].empty()) {
if (matrix[i][0] <= target && target <= matrix[i][s - 1]) {
for (int j = 0; j < s; j++) {
if (target == matrix[i][j]) {
return true;
}
}
}
}
}
return false;
}
};