Leetcode 391.完美矩形
完美矩形
我們有 N 個與坐標軸對齊的矩形, 其中 N > 0, 判斷它們是否能精確地覆蓋一個矩形區(qū)域。
每個矩形用左下角的點和右上角的點的坐標來表示。例如,?一個單位正方形可以表示為 [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個矩形一起可以精確地覆蓋一個矩形區(qū)域。
? ?
示例?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。因為中間有相交區(qū)域,雖然形成了矩形,但不是精確覆蓋。
?
?
核心思想就是:能夠正好圍成一個矩形的情況就是:
有且只有:
- 最左下 最左上 最右下 最右上 的四個點只出現(xiàn)過一次,其他肯定是成對出現(xiàn)的(保證完全覆蓋)
- 上面四個點圍成的面積,正好等于所有子矩形的面積之和(保證不重復)
?
1 import java.util.HashSet; 2 3 /** * 核心思想就是:能夠正好圍成一個矩形的情況就是: 4 * 有且只有: 5 * - 最左下 最左上 最右下 最右上 的四個點只出現(xiàn)過一次,其他肯定是成對出現(xiàn)的(保證完全覆蓋) 6 * - 上面四個點圍成的面積,正好等于所有子矩形的面積之和(保證不重復) 7 * Created by MebiuW on 16/8/29. */ 8 9 public class Solution{ 10 public boolean isRectangleCover(int[][] rectangles){ 11 int left=Integer.MAX_VALUE; 12 int right=Integer.MIN_VALUE; 13 int top=Integer.MIN_VALUE; 14 int bottom=Integer.MAX_VALUE; 15 int n=rectangles.length; 16 HashSet<String> flags=new HashSet<String>(); 17 int totalArea=0; 18 for(int i=0;i<n;i++){ 19 left=Math.min(left,rectangles[i][0]); 20 bottom=Math.min(bottom,rectangles[i][1]); 21 right=Math.max(right,rectangles[i][2]); 22 top=Math.max(top,rectangles[i][3]); 23 totalArea+=(rectangles[i][3]-rectangles[i][1])*(rectangles[i][2]-rectangles[i][0]); 24 String pointLT=rectangles[i][0]+" "+rectangles[i][3]; 25 String pointLB=rectangles[i][0]+" "+rectangles[i][1]; 26 String pointRT=rectangles[i][2]+" "+rectangles[i][3]; 27 String pointRB=rectangles[i][2]+" "+rectangles[i][1]; 28 if(!flags.contains(pointLT)) flags.add(pointLT); 29 else flags.remove(pointLT); 30 if(!flags.contains(pointLB)) flags.add(pointLB); 31 else flags.remove(pointLB); 32 if(!flags.remove(pointRT)) flags.add(pointRT); 33 else flags.remove(pointRT); 34 if(!flags.contains(pointRB)) flags.add(pointRB); 35 else flags.remove(pointRB); 36 } 37 if(flags.size()==4&&flags.contains(left+" "+top) 38 &&flags.contains(left+" "+bottom) 39 &&flags.contains(right+" "+bottom) 40 &&flags.contains(right+" "+top)){ 41 return totalArea==(right-left)*(top-bottom); 42 } 43 return false; 44 } 45 }
?
轉(zhuǎn)載于:https://www.cnblogs.com/kexinxin/p/10235371.html
總結(jié)
以上是生活随笔為你收集整理的Leetcode 391.完美矩形的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python-CSS整理
- 下一篇: hive lock命令的使用