Leetcode 391. Perfect Rectangle 完美矩形 解题报告

原创 2016年08月29日 16:04:45

1 解题思想

这道题是说给了一堆小矩形的坐标(左下角和右上角围成的),问其能否组合成一个完美的矩形(刚刚好,不多,不少,不交叉重复)。

这题肯定不能暴力开辟一个数组去做,或者其他类似思想。。

看了下Leetcode的讨论,最终总结出如下的做法:

 核心思想就是:能够正好围成一个矩形的情况就是:
有且只有:
- 最左下 最左上 最右下 最右上 的四个点只出现过一次,其他肯定是成对出现的(保证完全覆盖)
- 上面四个点围成的面积,正好等于所有子矩形的面积之和(保证不重复)

2 原题

Given N axis-aligned rectangles where N > 0, determine if they all together form an exact cover of a rectangular region.

Each rectangle is represented as a bottom-left point and a top-right point. For example, a unit square is represented as [1,1,2,2]. (coordinate of bottom-left point is (1, 1) and top-right point is (2, 2)).


Example 1:

rectangles = [
  [1,1,3,3],
  [3,1,4,2],
  [3,2,4,4],
  [1,3,2,4],
  [2,3,3,4]
]

这里写图片描述

Return true. All 5 rectangles together form an exact cover of a rectangular region.

Example 2:

rectangles = [
  [1,1,2,3],
  [1,3,2,4],
  [3,1,4,2],
  [3,2,4,4]
]

Return false. Because there is a gap between the two rectangular regions.

这里写图片描述

Example 3:

rectangles = [
  [1,1,3,3],
  [3,1,4,2],
  [1,3,2,4],
  [3,2,4,4]
]

Return false. Because there is a gap in the top center.

这里写图片描述

Example 4:

rectangles = [
  [1,1,3,3],
  [3,1,4,2],
  [1,3,2,4],
  [2,2,4,4]
]

Return false. Because two of the rectangles overlap with each other.

这里写图片描述

3 AC解

/**
 * 核心思想就是:能够正好围成一个矩形的情况就是:
 * 有且只有:
 *   - 最左下 最左上 最右下 最右上 的四个点只出现过一次,其他肯定是成对出现的(保证完全覆盖)
 *   - 上面四个点围成的面积,正好等于所有子矩形的面积之和(保证不重复)
 * 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.contains(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. Perfect Rectangle

Perfect Rectangle思路:核心思路2点:1,存储每个点,求出最后只出现奇数次的。判断最后是否只剩下4个。2.求每个矩形的总面积,判断是否和最后4个点构成的面积相等(防止内部重叠) ...
  • corpsepiges
  • corpsepiges
  • 2016年09月08日 16:07
  • 442

[leetcode] 391. Perfect Rectangle 解题报告

题目链接:https://leetcode.com/problems/perfect-rectangle/ Given N axis-aligned rectangles where N > 0,...
  • qq508618087
  • qq508618087
  • 2016年09月09日 05:33
  • 1323

LeetCode 223. Rectangle Area(两个矩形的复合面积计算)

原题网址:https://leetcode.com/problems/rectangle-area/ Find the total area covered by two rectilinear...
  • jmspan
  • jmspan
  • 2016年04月05日 00:48
  • 1078

Project Perfect让Swift在服务器端跑起来-让Perfect更Rails (五)

let Perfect like more Rails
  • u014388424
  • u014388424
  • 2016年02月27日 15:08
  • 6641

TLS完美前向保密(perfect forward secrecy)翻译

TLS完美前向加密(perfect forward secrecy)翻译
  • gufachongyang02
  • gufachongyang02
  • 2016年11月29日 15:04
  • 2951

leetCode 85.Maximal Rectangle (最大矩阵) 解题思路和方法

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and...
  • xygy8860
  • xygy8860
  • 2015年07月22日 13:43
  • 985

leetcode解题总结(持续更新)

树型:DFS或BFS(不够+状态存储,缩短时间)(如数位DP,就是DFS+状态存储) 链表:多用two pointer 无序数组:hash映射(O(1),map,set等),并查集,字典树tire 有...
  • ChinaJane163
  • ChinaJane163
  • 2016年09月21日 20:53
  • 588

leetcode解题思路

转载地址:http://blog.csdn.net/liuxialong/article/details/41941407 收录https://oj.leetcode.com/problem...
  • zr459927180
  • zr459927180
  • 2016年07月26日 09:37
  • 541

Leetcode解题思路总结(Easy)

近来走上了Leetcode刷题之路,不过刷题背后更重要的是思路,掌握了方法,举一反三融会贯通。故在此我总结每道题的解题思路,按照题目从简单到难的顺序来列举。 292 Nim Game,传说中的一行...
  • luoshengkim
  • luoshengkim
  • 2015年12月17日 17:12
  • 2918

SAM得到完美匹配(perfect match)

主要针对bwa生成的sam文件中,如何找到完美匹配的比对结果。
  • biubiuv
  • biubiuv
  • 2017年02月22日 15:03
  • 415
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Leetcode 391. Perfect Rectangle 完美矩形 解题报告
举报原因:
原因补充:

(最多只允许输入30个字)