2026-01-17-LeetCode刷题笔记-3047-求交集区域内的最大正方形面积

题目信息


题目描述

给定若干轴对齐矩形(用左下角与右上角坐标表示),任选两矩形,取它们的重叠区域。在所有重叠区域中,求能放下的最大正方形面积。


初步思路

  1. 两矩形的交集仍是一个轴对齐矩形,其宽高可由区间交得出。
  2. 交集矩形中最大正方形边长等于 min(交集宽, 交集高),面积为边长平方。
  3. 枚举所有矩形对,更新最大面积即可。

算法分析

  • 核心:枚举矩形对,计算交集宽高并取最小值作为正方形边长
  • 技巧:交集宽高为 min(tx1, tx2) - max(bx1, bx2)min(ty1, ty2) - max(by1, by2)
  • 正确性简述:任意两矩形的交集范围唯一,交集内能放下的最大正方形边长由更短边决定,枚举所有矩形对即可覆盖全局最优
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

代码实现(C++)

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    long long largestSquareArea(vector<vector<int>>& bottomLeft,
                                vector<vector<int>>& topRight) {
        long long max_side = 0;
        int n = (int)bottomLeft.size();
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < i; ++j) {
                int bx1 = bottomLeft[i][0], by1 = bottomLeft[i][1];
                int tx1 = topRight[i][0], ty1 = topRight[i][1];
                int bx2 = bottomLeft[j][0], by2 = bottomLeft[j][1];
                int tx2 = topRight[j][0], ty2 = topRight[j][1];

                int width = min(tx1, tx2) - max(bx1, bx2);
                int height = min(ty1, ty2) - max(by1, by2);
                int side = min(width, height);
                if (side > 0) max_side = max(max_side, (long long)side);
            }
        }
        return max_side * max_side;
    }
};

测试用例

输入 输出 说明
bottomLeft = \[1,1,2,2], topRight = \[3,3,4,4] 1 交集为 1x1,最大正方形面积 1
bottomLeft = \[0,0,1,0], topRight = \[2,1,3,2] 0 交集高度为 0,无法放正方形
bottomLeft = \[0,0,2,1,3,3], topRight = \[3,3,4,4,5,5] 1 取最优矩形对得到边长 1

总结与反思

  1. 交集矩形的最大正方形边长由短边决定,先算交集再取最小值即可。
  2. 枚举矩形对即可覆盖全局最优,注意 side > 0 才是有效交集。
相关推荐
深圳雨林凯AI4 小时前
图案裂变的“风格归一化“设计思路:主体保得住,画风才拉得齐|雨林凯AI技术笔记
人工智能·笔记
北域码匠4 小时前
高通滤波算法深度解析(High-Pass Filter)
stm32·算法·c#·数字信号处理·嵌入式开发·滤波算法·高通滤波
指掀涛澜天下惊4 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
乌萨奇也要立志学C++5 小时前
【洛谷】kmp算法
开发语言·算法
禹凕5 小时前
Dijkstra算法详解与应用
python·算法
冬木家居6 小时前
40㎡客厅变形记,小家住出大自由[特殊字符]
android·经验分享·笔记·智能家居·微信公众平台
YaraMemo6 小时前
元启发式算法框架
人工智能·算法·5g·信息与通信·启发式算法·信号处理
摇滚侠6 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 数据库初始化机制 阅读笔记 36
数据库·spring boot·笔记
weixin_307779136 小时前
一维无粘 Burgers 方程的激波形成问题:MacCormack 格式求解
c++·算法·matlab
HugoStudio_SWAN6 小时前
洛谷 B4500 / B4449 / B3843 凯撒密码、密码强度与密码合规——加密与安全的三道门
c++·学习·程序人生·算法·安全