Leetcode 391.完美矩形
完美矩形
我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域。
每个矩形用左下角的点和右上角的点的坐标来表示。例如, 一个单位正方形可以表示为 [1,1,2,2]。 ( 左下角的点的坐标为 (1, 1) 以及右上角的点的坐标为 (2, 2) )。
示例 1:
rectangles = [
[1,1,3,3],
[3,1,4,2],
[3,2,4,4],
[1,3,2,4],
[2,3,3,4]
]
返回 true。5个矩形一起可以精确地覆盖一个矩形区域。
示例 2:
rectangles = [
[1,1,2,3],
[1,3,2,4],
[3,1,4,2],
[3,2,4,4]
]
返回 false。两个矩形之间有间隔,无法覆盖成一个矩形。
示例 3:
rectangles = [
[1,1,3,3],
[3,1,4,2],
[1,3,2,4],
[3,2,4,4]
]
返回 false。图形顶端留有间隔,无法覆盖成一个矩形。
示例 4:
rectangles = [
[1,1,3,3],
[3,1,4,2],
[1,3,2,4],
[2,2,4,4]
]
返回 false。因为中间有相交区域,虽然形成了矩形,但不是精确覆盖。
核心思想就是:能够正好围成一个矩形的情况就是:
有且只有:
- 最左下 最左上 最右下 最右上 的四个点只出现过一次,其他肯定是成对出现的(保证完全覆盖)
- 上面四个点围成的面积,正好等于所有子矩形的面积之和(保证不重复)
import java.util.HashSet; /** * 核心思想就是:能够正好围成一个矩形的情况就是:
* 有且只有:
* - 最左下 最左上 最右下 最右上 的四个点只出现过一次,其他肯定是成对出现的(保证完全覆盖)
* - 上面四个点围成的面积,正好等于所有子矩形的面积之和(保证不重复)
* Created by MebiuW on 16/8/29. */ public class Solution{
public boolean isRectangleCover(int[][] rectangles){
int left=Integer.MAX_VALUE;
int right=Integer.MIN_VALUE;
int top=Integer.MIN_VALUE;
int bottom=Integer.MAX_VALUE;
int n=rectangles.length;
HashSet<String> flags=new HashSet<String>();
int totalArea=0;
for(int i=0;i<n;i++){
left=Math.min(left,rectangles[i][0]);
bottom=Math.min(bottom,rectangles[i][1]);
right=Math.max(right,rectangles[i][2]);
top=Math.max(top,rectangles[i][3]);
totalArea+=(rectangles[i][3]-rectangles[i][1])*(rectangles[i][2]-rectangles[i][0]);
String pointLT=rectangles[i][0]+" "+rectangles[i][3];
String pointLB=rectangles[i][0]+" "+rectangles[i][1];
String pointRT=rectangles[i][2]+" "+rectangles[i][3];
String pointRB=rectangles[i][2]+" "+rectangles[i][1];
if(!flags.contains(pointLT)) flags.add(pointLT);
else flags.remove(pointLT);
if(!flags.contains(pointLB)) flags.add(pointLB);
else flags.remove(pointLB);
if(!flags.remove(pointRT)) flags.add(pointRT);
else flags.remove(pointRT);
if(!flags.contains(pointRB)) flags.add(pointRB);
else flags.remove(pointRB);
}
if(flags.size()==4&&flags.contains(left+" "+top)
&&flags.contains(left+" "+bottom)
&&flags.contains(right+" "+bottom)
&&flags.contains(right+" "+top)){
return totalArea==(right-left)*(top-bottom);
}
return false;
}
}
Leetcode 391.完美矩形的更多相关文章
- Java实现 LeetCode 391 完美矩形
391. 完美矩形 我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域. 每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为 ...
- [LeetCode] Perfect Rectangle 完美矩形
Given N axis-aligned rectangles where N > 0, determine if they all together form an exact cover o ...
- 391 Perfect Rectangle 完美矩形
有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域.每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为 [1,1,2,2]. ( ...
- [LeetCode] Rectangle Area 矩形面积
Find the total area covered by two rectilinear rectangles in a2D plane. Each rectangle is defined by ...
- [LeetCode] Rectangle Overlap 矩形重叠
A rectangle is represented as a list [x1, y1, x2, y2], where (x1, y1) are the coordinates of its bot ...
- Leetcode 492. 构造矩形
1.题目描述 作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的. 现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面.要求: 1. 你设 ...
- leetcode 签到 836. 矩形重叠
836. 矩形重叠 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标. 如果相交的面积为正,则称两矩形重叠.需要明确的 ...
- LeetCode-391. 完美矩形(使用C语言编译,详解)
链接:https://leetcode-cn.com/problems/perfect-rectangle/description/ 题目 我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, ...
- [Swift]LeetCode391. 完美矩形 | Perfect Rectangle
Given N axis-aligned rectangles where N > 0, determine if they all together form an exact cover o ...
随机推荐
- [转]NopCommerce之视图设计
本文转自:http://blog.csdn.net/hygx/article/details/7324452 Designer's Guide Contents Overview 概述 Inst ...
- react-native入门学习( 一 )
开发环境配置 因为个人电脑是windows7环境,所以在选择安装react-native 环境的时候是用的 windows+androidreact-native中文网文档地址 https://re ...
- 使用Intellij IDEA搭建一个简单的Maven项目
IntelliJ IDEA是Java最优秀的开发工具,它功能全面,提示比较智能,开发界面炫酷,新技术支持的比较迅速. 我使用了Eclipse快10年了,IntelliJ IDEA这么好用必须要试一试. ...
- you don't have permission to access / on this server解决
时间:2014-10-13 17:34来源:有何不可 作者:有何不可 举报 点击:56151次 项目部署到Apache Http Server上面,通过apachectl -t 检测配置文件也没有问题 ...
- greendao 查询之数据去重
最近使用greendao的过程中,有一个需求:将数据库的内容根据组别展示.意思就是需要将数据库中的所有组别取出来,然后根据组别加载数据.之前我的笨办法是获取所有的数据,然后对得到的数据手动去重(比较每 ...
- matlab载入图像,旋转,裁剪 保存
clc;clear all;close all src=imread('C:\Users\think\Desktop\12.jpg'); subplot(,,) imshow(src); I = ma ...
- linux_base-f10-10_7 linuxulator is not (kld)loaded
# cd linux_base-f10/# make install clean===> linux_base-f10-10_7 linuxulator is not (kld)loaded. ...
- jmeter中通过jdbc方式连接mysql数据库的配置参考
jmeter中通过jdbc方式连接mysql数据库的配置参考: Database URL=jdbc:mysql://ip:port/dbname?useUnicode=true&allowMu ...
- C# for循环的嵌套 作用域
for() { 循环体可以套无数个for循环 } 比如:for() { for() { for() {... ...这里面可以镶嵌无数个for循环} } } 也可以这样 for() { for() ...
- C#语言基础 Main 函数中变量 整型
在我们每次上网或者用电脑的时候,请输入你的xxx 或者你的名字(年龄/身高/学校/籍贯)是 在这里我们就要学到一些变量,就是不确定的东西 string a: //赋予变量 a ="内容& ...