第45天(中等题 数据结构)
打卡第四十五天
2道中等题

题目:

思路:对网格中的每个位置,分别计算它的两条对角线上不同值的数量,然后计算这两个数量的绝对差。
代码:
class Solution {
public:
vector<vector<int>> differenceOfDistinctValues(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size();// 网格的行数m和列数n
vector<vector<int>> ans(m, vector<int>(n, 0));// 初始化结果矩阵ans,大小为m×n,所有元素初始值为0
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
set<int> s1;// 创建集合s1,存储右下对角线上的不同值
int x = i + 1, y = j + 1;// 从当前位置(i,j)的右下角第一个单元格开始
while (x < m && y < n) {// 沿着右下对角线遍历,收集不同值到s1
s1.insert(grid[x][y]); // 插入当前单元格的值
x += 1; // 行索引下移
y += 1; // 列索引右移
}
set<int> s2;// 创建集合s2,存储左上对角线上的不同值
x = i - 1, y = j - 1;// 从当前位置(i,j)的左上角第一个单元格开始
while (x >= 0 && y >= 0) {// 沿着左上对角线遍历,收集不同值到s2
s2.insert(grid[x][y]); // 插入当前单元格的值
x -= 1; // 行索引上移
y -= 1; // 列索引左移
}
ans[i][j] = abs((int)s1.size() - (int)s2.size());// 右下对角线不同值数量减去左上对角线不同值数量的绝对值
}
}
return ans;
}
};
耗时≈一小时 明天继续

浙公网安备 33010602011771号