2713. 矩阵中严格递增的单元格数
思路:1、先对数组中的元素按值从小到大处理
2、对于当前的元素值,可以更新当前所在行和列的最大值。
3、最后每一行或每一列的最大值即为所求值
细节看注释
class Solution {
public:
int maxIncreasingCells(vector<vector<int>>& mat) {
map<int ,vector<pair<int ,int>>> mp;
int n=mat.size(),m=mat[0].size();
//先对数组中的元素按值从小到大排好序
//可能存在相同的元素值,所以用到数组来存下标的位置
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
mp[mat[i][j]].push_back({i,j});
}
}
//记录每一行、每一列的最大值
vector<int> row(n,0),col(m,0);
//这里用到迭代器,没有用auto方法遍历
map<int ,vector<pair<int ,int>>>::iterator tmp;
//记录最大值
int mx=0;
//遍历每一个元素值
for(tmp=mp.begin();tmp!=mp.end();tmp++){
//当前处理的元素值
int key=tmp->first;
//用于存储当前位置更新的最大值
vector<int> res;
//处理当前元素值的所有位置
for(auto t:tmp->second){
//用res存储,而不是及时更新,就是怕影响后面位置的处理
res.push_back(max(row[t.first],col[t.second])+1);
}
int i=0;
//更新当前元素值的所有位置带来的行、列最大值
for(auto t:tmp->second){
row[t.first]=max(row[t.first],res[i]);
col[t.second]=max(col[t.second],res[i]);
i++;
mx=max(mx,row[t.first]);
}
}
return mx;
}
};
标签:tmp,2713,int,res,最大值,单元格,second,哈希,row
From: https://blog.csdn.net/weixin_46028214/article/details/139811182