perfect-rectangle
https://leetcode.com/problems/perfect-rectangle/
// https://discuss.leetcode.com/topic/55944/o-n-log-n-sweep-line-solution
public class Solution {
public class Column implements Comparable<Column> {
int xs;
int[] rect;
public Column(int xs, int[] rect) {
this.xs = xs;
this.rect = rect;
}
public int compareTo(Column that) {
if (this.xs != that.xs) {
return this.xs - that.xs;
}
return this.rect[0] - that.rect[0];
}
}
public boolean isRectangleCover(int[][] rectangles) {
PriorityQueue<Column> pq = new PriorityQueue<Column>();
int[] border = {Integer.MAX_VALUE, Integer.MIN_VALUE};
for (int[] rect : rectangles) {
Column c1 = new Column(rect[0], rect);
Column c2 = new Column(rect[2], rect);
pq.add(c1);
pq.add(c2);
if (rect[1] < border[0]) {
border[0] = rect[1];
}
if (rect[3] > border[1]) {
border[1] = rect[3];
}
}
TreeSet<int[]> tset = new TreeSet<int[]> (new Comparator<int[]>(){
public int compare(int []rect1, int[]rect2) {
if (rect1[3] <= rect2[1]) {
return -1;
}
else if (rect1[1] >= rect2[3]) {
return 1;
}
else {
return 0;
}
}
});
int yRange = 0;
while (!pq.isEmpty()) {
int xs = pq.peek().xs;
while (!pq.isEmpty() && pq.peek().xs == xs) {
Column col = pq.poll();
int[] rect = col.rect;
if (xs == rect[2]) {
tset.remove(rect);
yRange -= rect[3] - rect[1];
}
else {
// xs == rect[0]
if (!tset.add(rect)) {
// intersect
return false;
}
yRange += rect[3] - rect[1];
}
}
// if pq.isEmpty(), the right line, no need to check
if (!pq.isEmpty() && yRange != border[1] - border[0]) {
return false;
}
}
return true;
}
}
perfect-rectangle的更多相关文章
- Leetcode: Perfect Rectangle
Given N axis-aligned rectangles where N > 0, determine if they all together form an exact cover o ...
- [LeetCode] Perfect Rectangle 完美矩形
Given N axis-aligned rectangles where N > 0, determine if they all together form an exact cover o ...
- [Swift]LeetCode391. 完美矩形 | Perfect Rectangle
Given N axis-aligned rectangles where N > 0, determine if they all together form an exact cover o ...
- 391. Perfect Rectangle
最后更新 一刷 16-Jan-2017 这个题我甚至不知道该怎么总结. 难就难在从这个题抽象出一种解法,看了别人的答案和思路= =然而没有归类总结到某种类型,这题相当于背了个题... 简单的说,除了最 ...
- 391 Perfect Rectangle 完美矩形
有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域.每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为 [1,1,2,2]. ( ...
- Perfect Rectangle(完美矩形)
我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域. 每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为 [1,1,2,2] ...
- LeetCode赛题391----Perfect Rectangle
#391. Perfect Rectangle Given N axis-aligned rectangles where N > 0, determine if they all togeth ...
- LeetCode All in One 题目讲解汇总(持续更新中...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
- Swift LeetCode 目录 | Catalog
请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift 说明:题目中含有$符号则为付费题目. 如 ...
- LeetCode All in One题解汇总(持续更新中...)
突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...
随机推荐
- 详谈 Spring 中的 IOC 和 AOP
这篇文章主要讲 Spring 中的几个点,Spring 中的 IOC,AOP,下一篇说说 Spring 中的事务操作,注解和 XML 配置. Spring 简介 Spring 是一个开源的轻量级的企业 ...
- MOD 10,11算法(GB/T 17710-1999 数据处理 校验码系统 )的 Python实现
以上是算法简要说明,以下代码为Python实现,不过注意代码中的N=15,不是16. # GB/T 17710 双模校验算法 # QQ 3257132998 def GB_Code(str): str ...
- [漏洞复现]CVE-2010-2883 Adobe Reader 打开pdf电脑即刻中招
1.漏洞概述: CVE-2010-2883漏洞原理:“Adobe Reader在处理CoolType字体文件的sing表时,存在栈溢出漏洞,当打开特制的恶意PDF文件时,可允许任意代码远程执行.” 影 ...
- Openstack-开发基础 stevedore学习
在给openstack-N版加路由的时候发现怎么都无法搞定,原来现在用这个模块来处理了 stevedore是用来实现动态加载代码的开源模块.它是在OpenStack中用来加载插件的公共模块.可以独立于 ...
- [BZOJ 4591] 超能粒子炮-改
Link: 传送门 Solution: 记录一下推$\sum_{i=0}^k C_n^i$的过程: 其实就是将相同的$i/p$合起来算,这样每个里面都是一个可以预处理的子问题 接下来递归下去算即可 T ...
- 安装第三方jar包的两种方式
由于部分第三放jar包没有放到maven中央仓库,而项目中又依赖了这些jar包,那么如何安装?我实践了两种,特做记录. 一.安装到 nexus 私有库: 在 3rd party 仓库下有个 Artif ...
- Vue+Express实现前后端分离
先说明一下缘由,因为自己前段时间在实习,实习期间为了参与项目开发,粗略学习了下Vue.Vuex.Vue-Router,大致会一些基础的.这里也快要做毕业设计了,趁着放假回来的这两天,学习下Node的相 ...
- 洛谷OJ U552 守墓人 线段树模板题
题目描述 Description 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然... ...
- Topcoder SRM 643 Div1 250<peter_pan>
Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...
- jsoncpp 0.5 ARM移植
1.下载jsonapp 0.5 https://github.com/open-source-parsers/jsoncpp 2.编译 platform 没有包含 arm 平台,需要把源码提取出来,独 ...