C语言 | Leetcode C语言题解之第391题完美矩形

题目:

题解:

/* 参照官方答案题解:
1.小矩形面积之和等于大矩形区域面积
2.矩形区域内部顶点出现次数只能是2次或4次(边界四个顶点只能出现一次)
*/
typedef struct {
    int x;
    int y;
} Coordinate;

typedef struct {
    Coordinate pos;
    int cnt;
    UT_hash_handle hh;
} CoordRecord;

CoordRecord *FindNode(CoordRecord **root, int x, int y)
{
    Coordinate tmp = {
        .x = x,
        .y = y
    };
    CoordRecord *ptr = NULL;
    HASH_FIND(hh, *root, &tmp, sizeof(Coordinate), ptr);
    return ptr;
}

void AddNode(CoordRecord **root, int x, int y)
{
    CoordRecord *ptr = FindNode(root, x, y);
    if (ptr == NULL) {
        CoordRecord *rec = (CoordRecord*)malloc(sizeof(CoordRecord));
        rec->cnt = 1;
        rec->pos.x = x;
        rec->pos.y = y;
        HASH_ADD(hh, *root, pos, sizeof(Coordinate), rec);
    } else {
        (ptr->cnt)++;
    }
}

bool isRectangleCover(int** rectangles, int rectanglesSize, int* rectanglesColSize){
    CoordRecord *root = NULL;
    int minx = INT_MAX;
    int miny = INT_MAX;
    int maxa = 0;
    int maxb = 0;
    int area = 0;
    for (int i = 0; i < rectanglesSize; ++i) {
        int x = rectangles[i][0];
        int y = rectangles[i][1];
        int a = rectangles[i][2];
        int b = rectangles[i][3];

        /* 计算每个小矩形的面积之和 */
        area += (a - x) * (b - y);

        /* 为最后求大矩形面积做准备 */
        minx = fmin(minx, x);
        miny = fmin(miny, y);
        maxa = fmax(maxa, a);
        maxb = fmax(maxb, b);

        /* 统计每个顶点出现的次数 */
        AddNode(&root, x, y);
        AddNode(&root, x, b);
        AddNode(&root, a, y);
        AddNode(&root, a, b);
    }

    /* 面积之和不相等,则返回false */
    if ((maxa - minx) * (maxb - miny) != area) {
        return false;
    }

    /* 判断每个顶点出现的次数 */
    HASH_ITER(hh, root, node, p) {
        // 左边界两个顶点
        if ((node->pos.x == minx) && (node->pos.y == miny || node->pos.y == maxb)) {
            if (node->cnt != 1) {
                return false;
            }
        // 右边界两个顶点
        } else if ((node->pos.x == maxa) && (node->pos.y == miny || node->pos.y == maxb)) {
            if (node->cnt != 1) {
                return false;
            }
        // 内部顶点
        } else {
            if (node->cnt % 2) {
                return false;
            }
        }
    }

    /* 释放hash表 */
    HASH_ITER(hh, root, node, p) {
        HASH_DEL(root, node);
        free(node);
    }

    return true;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/873706.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb(后端)

Spring-MVC Spring MVC&#xff08;Model-View-Controller&#xff09;是Spring框架中的一个模块&#xff0c;用于构建基于MVC设计模式的Web应用程序。Spring MVC将应用程序分为三个主要部分&#xff1a; Model&#xff1a;负责处理数据和业务逻辑。View&#xff1a;负责展示…

Rancher 与 Kubernetes(K8s)的关系

1. 简介 1.1 Kubernetes 作为容器编排平台 Kubernetes 是一个开源平台&#xff0c;用于自动化部署、扩展和管理容器化的应用。它提供了容器调度、自动伸缩、健康检查、滚动更新等功能。 例子&#xff1a;假设您有一个微服务架构的应用程序&#xff0c;需要运行在多个节…

单例的饿汉式,懒汉式的线程安全问题

1 单例的饿汉式 对象在类加载的时候就创建了&#xff0c;线程安全&#xff0c;速度块&#xff0c;但是浪费空间&#xff0c; public class Hungry {//唯一对象private static final Hungry HUNGRY new Hungry();byte byte1[]new byte[1024];byte byte2[]new byte[1024];byte…

openSSL 如何降版本

文章目录 前言openSSL 如何降版本1. 卸载2. 安装新的openssl版本3. 验证 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话&…

DDS-数据分发服务

目录 1.ROS2架构 2.DDS概念 参考资料 1.ROS2架构 在ROS 2&#xff08;Robot Operating System 2&#xff09;中&#xff0c;系统通常由以下几个核心部分组成&#xff0c;它们共同构成了ROS 2的架构和功能&#xff1a; Plumbing&#xff08;管道&#xff09;: 这个术语在ROS …

Oracle OCP认证值得考吗? 需要门槛吗?

随着数据量的爆炸性增长和企业对数据依赖性的提升&#xff0c;对数据库专业人士的需求也在不断上升。OCP认证&#xff0c;作为Oracle公司提供的权威认证之一&#xff0c;长期以来被视为数据库专业人士技能和知识水平的重要标志。 但随着技术的发展和认证种类的增多&#xff0c;…

快速解决git am冲突

前言 当希望通过git am xxxx.patch&#xff0c;添加一些代码修改&#xff0c;如果代码版本相差较大&#xff0c;就可能产生冲突。 这种必须要我们手动修改冲突内容。 解决过程 1. git am 尝试打入patch补丁 git am 0004-patch.patch2. git apply --reject生成冲突文件 执行…

uniapp设置微信小程序的交互反馈

链接&#xff1a;uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗&#xff1a; title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon&#xff1a;error是设置我们失败的logo 设置的文字上…

keil安装及运行第一个stm32程序

前言 记录如何安装keil软件及运行第一个stm32程序 目录 一、keil开发环境搭建 0.keil是什么 1.keil下载 2.keil软件安装 3.安装芯片支持包 4.破解激活 二、keil工程结构 1.创建目录结构 2.新建工程 3.配置项目 (1).例程准备 (2).工程目录管理 (3).选项配置 4.例…

渗透测试学习资源

burp学院 https://portswigger.net/burp/documentation/desktop/getting-started https://portswigger.net/web-security/ hacker101学院 https://www.hacker101.com/ https://github.com/bugcrowd/bugcrowd_university 如何白嫖自学网络安全技术&#xff0c;最稳最推荐的网…

CGAL 概念模型及Traits 概述

CGAL 概念模型及Traits 本节释了概念Concepts 、模型Models以及Traits类的含义。 CGAL Concepts and Models 概念Concepts是对类型的一组要求&#xff0c;即它具有特定的嵌套类型、特定的成员函数或具有特定的以该类型为参数的自由函数。概念的模型 Models是一个满足概念需求…

购买磨轮平衡机时应该注意什么问题和技巧

在购买磨轮平衡机时&#xff0c;您应该注意以下几个关键点&#xff1a; 平衡精度 平衡精度是衡量平衡机性能的核心指标&#xff0c;直接影响到不平衡量的检测与校准的准确性&#xff0c;从而决定磨轮的振动和噪声水平。高精度的平衡机能显著减少振动和噪声&#xff0c;提高磨…

IEEE投稿模板翻译

>将这一行替换为您的稿件id号(双击此处编辑)< IEEE 期刊和会议论文的撰写准备&#xff08;2022&#xff09; 第一作者 A. 作者&#xff0c;IEEE成员&#xff0c;第二作者 B. 作者&#xff0c;第三作者 C. 作者 Jr.&#xff0c;IEEE成员 摘要—本文档为IEEE会刊、期刊和…

推荐一个Python流式JSON处理模块:streaming-json-py

每天&#xff0c;我们的设备、应用程序和服务都在生成大量的数据流&#xff0c;这些数据往往大多是以JSON格式存在的。 如何高效地解析和处理这些JSON数据流是一大挑战。今天&#xff0c;我要为大家介绍一个能极大简化这一过程的利器&#xff1a;streaming-json-py streaming…

负载均衡调度器--LVS

文章目录 集群和分布式集群分布式 LVS介绍LVS特点LVS工作原理LVS集群架构 LVS集群中的术语CIPVIPRSDIPRIP LVS集群的工作模式NAT模式DR模式DR的工作原理DR的特点:DR的网络配置1.配置负载均衡器2.配置后端服务器lo接口的作用 3.测试连接&#xff1a; DR的典型应用场景 TUN模式 L…

新电脑Win11系统想要降级为Win10怎么操作?

前言 现在的电脑大部分都是Windows 11系统&#xff0c;组装机还好一些&#xff0c;如果想要使用Windows 10&#xff0c;只需要在安装系统的时候选择Windows 10镜像即可。 但是对于新笔记本、厂商的成品机、一体机来说&#xff0c;只要是全新的电脑&#xff0c;基本上都是Wind…

评论的组件封装

主评论的人在数组第一层级&#xff0c;回复的评论都在children里面 【{ name:"张三" idGenerator: 475403892531269 info_Conmment":"今天天气晴朗&#x1f600;" children:[ { mainIdGenerator:475388950118469 name:"张三" name1&#x…

揭秘世界上那些同时横跨两大洲的国家

我们在《世界人口过亿的一级行政区分布》盘点全球是那些人口过亿的一级行政区。 现在我们介绍五个横跨两州的国家&#xff0c;并整理七大洲和这些国家的KML矢量数据分析分享给大家&#xff0c;如果你需要这些数据&#xff0c;请在文末查看领取方式。 世界上横跨两大洲的国家 …

2024全开源彩虹晴天多功能系统源码/知识付费系统/虚拟商城系统 完美可用带教程

源码简介&#xff1a; 2024最新彩虹晴天多功能系统源码&#xff0c;知识付费虚拟商城&#xff0c;完美可用&#xff0c;无需授权、国内外服务器皆可搭建、无论是不是备案域名也都可以部署、可以商业运营。 这个源码实用&#xff0c;它不仅完美可用&#xff0c;而且完全免F&am…

CSS之我不会

非常推荐html-css学习视频&#xff1a;尚硅谷html-css 一、选择器 作用&#xff1a;选择页面上的某一个后者某一类元素 基本选择器 1.标签选择器 格式&#xff1a;标签{} <h1>666</h1><style>h1{css语法} </style>2.类选择器 格式&#xff1a;.类…