?前言?
开更五月集训专题,由浅入深,深入浅出,飞向大厂!
🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人 ?联系方式:2201891280(QQ) ?全文大约阅读时间: 20min
1351. 统计有序矩阵中的负数
1351. 统计有序矩阵中的负数
解题思路
剑指的一道类似题,只要从右上开始寻找元素就好了。依次往下往左找元素。
代码
class Solution {
public:
int countNegatives(vector<vector<int>>& grid) {
int ans = 0;
int rowsize = grid.size(), colsize = grid[0].size(), row = 0, col = colsize - 1;
while(col >= 0){
while(row < rowsize && grid[row][col] >= 0) ++row;
if(row < rowsize) ans += rowsize - row,--col;
else break;
}
return ans;
}
};
注意的点
注意判断边界,比较重要。
1672. 最富有客户的资产总量
1672. 最富有客户的资产总量
解题思路
逐行统计信息,返回结果就好了。
代码
class Solution {
public:
int maximumWealth(vector<vector<int>>& accounts) {
int ans = 0;
for(auto account : accounts){
int tmp = 0;
for(auto acc : account) tmp += acc;
ans = max(ans,tmp);
}
return ans;
}
};
注意的点
没啥注意的
832. 翻转图像
832. 翻转图像
解题思路
每一行进行反转然后取反就好了。
代码
class Solution {
public:
vector<vector<int>> flipAndInvertImage(vector<vector<int>>& image) {
int n = image[0].size();
for(auto &row : image){
for(int i = 0;i < n / 2;++i)
swap(row[i],row[n - 1 - i]), row[i] = row[i] == 0 ? 1 : 0,row[n - 1 - i] =row[n - 1 - i] == 0 ? 1 : 0;
if(n % 2 == 1) row[n/2] = row[n/2] == 0 ? 1 : 0;
}
return image;
}
};
注意的点
- 因为要修改值所以采用
& 的方式进行遍历 - 中间值需要单独判断进行反转
1329. 将矩阵按对角线排序
1329. 将矩阵按对角线排序
解题思路
先全取出来到vector,然后排序写回就好了。
代码
class Solution {
void sortduijiao(vector<vector<int>>& mat,int row, int col, int rownow,int colnow){
vector<int> tmp;
int r = rownow,c = colnow;
while(r < row&& c < col) tmp.push_back(mat[r][c]),++r,++c;
sort(tmp.begin(), tmp.end());
while(r > rownow) mat[--r][--c] = tmp.back(), tmp.pop_back();
}
public:
vector<vector<int>> diagonalSort(vector<vector<int>>& mat) {
int row = mat.size(), col = mat[0].size();
for(int i = 0;i < col;++i)
sortduijiao(mat,row,col,0,i);
for(int i = 0;i < row;++i)
sortduijiao(mat,row,col,i,0);
return mat;
}
};
注意的点
- 变量命名还是有助于自己的理解的,我们老师经常说代码自注释,要注意。
- 可以不用重新改变量,直接反向写回就好了,类似于栈的操作,可以学习一下。
写在最后
水题的一题。今天好忙,大家再忙也要刷题呀。
|