第45天(中等题 数据结构)

打卡第四十五天
2道中等题
image

题目:
image

思路:对网格中的每个位置,分别计算它的两条对角线上不同值的数量,然后计算这两个数量的绝对差。

代码:

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;
    }
};

耗时≈一小时 明天继续

posted @ 2025-12-05 00:54  Wy0518  阅读(4)  评论(0)    收藏  举报