2025.12.11 力扣每日一题

3531.统计被覆盖的建筑

大神解法 很巧妙

cpp 复制代码
class Solution {
public:
    int countCoveredBuildings(int n, vector<vector<int>>& buildings) {
        //row_min[y]:第 y 行中,所有建筑的最小 x 坐标(代表这一行最左边的建筑);
        //row_max[y]:第 y 行中,所有建筑的最大 x 坐标(代表这一行最右边的建筑);
        //col_min[x]:第 x 列中,所有建筑的最小 y 坐标(代表这一列最上边的建筑);
        //col_max[x]:第 x 列中,所有建筑的最大 y 坐标(代表这一列最下边的建筑);
        //初始化时:row_min/col_min设为INT_MAX(方便后续取更小值),row_max/col_max默认初始为 0(题目中建筑坐标是正整数,不影响)。
        vector<int> row_min(n + 1, INT_MAX), row_max(n + 1);
        vector<int> col_min(n + 1, INT_MAX), col_max(n + 1);
        //遍历所有建筑,统计每一行的左右边界、每一列的上下边界。
        for (auto& p : buildings) {
            int x = p[0], y = p[1];
            row_min[y] = min(row_min[y], x);
            row_max[y] = max(row_max[y], x);
            col_min[x] = min(col_min[x], y);
            col_max[x] = max(col_max[x], y);
        }
        int ans = 0;
        for (auto& p : buildings) {
            int x = p[0], y = p[1];
            // 条件:在当前行的左右之间,且在当前列的上下之间
            //row_min[y] < x:当前建筑在行的左边界右边(左边有建筑);
            //x < row_max[y]:当前建筑在行的右边界左边(右边有建筑);
            //col_min[x] < y:当前建筑在列的上边界下边(上边有建筑);
            //y < col_max[x]:当前建筑在列的下边界上边(下边有建筑)。
            if (row_min[y] < x && x < row_max[y] && col_min[x] < y &&
                y < col_max[x]) {
                ans++;
            }
        }
        return ans;
    }
};
相关推荐
octopus_c3 小时前
数据结构:堆(Heap)详解
c语言·数据结构·算法
YH55269849 小时前
GPT‑5.6 Sol 原本支持 1M 上下文,Codex 现已放开此前限制,如何看待这次调整?
java·jvm·人工智能·gpt·算法·chatgpt
遥感知识服务10 小时前
从局部阈值、双极化到暗地表剔除:NASA OPERA DSWx-S1全球动态水体算法拆解
大数据·人工智能·深度学习·神经网络·算法·机器学习
晚风醉蝶10 小时前
1-13-TimSort
算法
ZJU_统一阿萨姆10 小时前
【算子开发】算子融合与Softmax_LayerNorm实现
人工智能·算法·语言模型·硬件架构
叩码以求索12 小时前
浅谈:前序遍历反转法求解N叉树的后序遍历
算法
北风toto14 小时前
中缀、前缀、后缀表达式
算法·软件设计师
听取WA声一片(无恶意)14 小时前
CSP-J/CSP-S 深度优先搜索(DFS)完全讲义
c++·算法·深度优先
码流怪侠14 小时前
2026年8月GitHub热榜深度拆解:Agent Skills席卷开源圈,一个“技能包“收割5万星
算法·程序员·github
hold?fish:palm14 小时前
30 两两交换链表中的节点
数据结构·算法·链表