题目的意思是,我们有一个矩阵,矩阵的行是单调递增的,列也是单调递增的,那么,我们需要判断 target 是否在这个矩阵里面,有点像是二分查找。假设全部遍历一遍,是 O(mn)O(mn)O(mn) 的时间复杂度,90000 好像还可以吧。题目要求高效的搜索算法,肯定不是这种。但是我不知道怎么搞。我试下这个全部搜索一遍的做法。确实也是可以通过,就像下面这个代码,有这个实力,应该也可以通过了。也就是说到时候机试应该是可以不爆零了。但是我感觉还是不稳。要是热门一百题刷透,我觉得我肯定是有均分的实力的。我必须毫无保留地相信自己呢。看了一下题解,可以用二分来做,也可以用一种奇怪的方法来做,奇怪的方法效率更高一些。从右上角往左下分析,确实非常高效地利用了这个性质,非常不错。就是,每次如果我们需要找的 target 更小,那么,肯定就是在左边。如果 target 更大,肯定就是在下面,遍历结束,肯定就是得到了一个确定的结果。至于为什么时间复杂度是 O(m+n)O(m+n)O(m+n) ,是因为,我们考虑极端的情况,不断左移,然后不断下移,都到达极限位置,级别上和 m+nm+nm+n 是一致的。二分的代码也不是那么困难。其实也还好呢。可以压行写,非常的简洁抽象,非常有意思。另外看过一个博主的观点,他认为一个题不断地摩擦和总结,最后就会引起质变,非常有意思。我非常认可。三元表达式非常炫技,我非常喜欢这种写法。看起来非常简洁。
cpp
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int m = matrix.size();
int n = matrix[0].size();
for ( int i = 0; i < m; i++ ) {
for ( int j = 0; j < n; j++ ) {
if ( matrix[i][j] == target ) {
return true;
}
}
}
return false;
}
};
cpp
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
if ( matrix.empty() || matrix[0].empty() ) {
return false;
}
int m = matrix.size();
int n = matrix[0].size();
int row = 0;
int col = n - 1;
while ( row < m && col >= 0 ) {
if ( matrix[row][col] == target ) {
return true;
} else if ( matrix[row][col] > target ) {
col--;
} else if ( matrix[row][col] < target ) {
row++;
}
}
return false;
}
};
cpp
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
for ( auto& row: matrix ) {
int left = 0;
int right = row.size() - 1;
while ( left <= right ) {
int mid = left + ( right - left ) / 2;
if ( row[mid] == target ) {
return true;
} else if ( row[mid] < target ) {
left = mid + 1;
} else {
right = mid - 1;
}
}
}
return false;
}
};
cpp
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int row = 0, col = matrix[0].size() - 1;
while ( row < matrix.size() && col >= 0 ) {
if ( matrix[row][col] == target ) {
return 1;
}
matrix[row][col] > target ? col--: row++;
}
return 0;
}
};
day 2
上午记了 40 单词。昨天晚上好饿,好想吃一些零食啥的,但是家里没有哈哈哈。看了一下玄幻小说,非常非常爽。这个放松方式不错。我下午记忆了 40 个单词。感觉,数学和专业课的复习也要提上日程。最近就是背单词和刷算法题,这样子还是差点儿意思呢。晚上学了 40 单词。好累啊。感觉是看电子屏幕时间太长了。另外除了看小说和散步,还有听孙燕姿的歌儿,尽量减少其他的娱乐活动。因为。一些非常现实的原因。前途真的渺茫了。有点儿。哈哈哈。