1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
func isRectangleCover(rects [][]int) bool {
minx, miny, maxx, maxy := 1<<31-1, 1<<31-1, -1<<31, -1<<31
area := 0
s := map[[2]int]bool{}
for _, r := range rects {
minx = min(minx, r[0]); miny = min(miny, r[1])
maxx = max(maxx, r[2]); maxy = max(maxy, r[3])
area += (r[2]-r[0])*(r[3]-r[1])
pts := [][2]int{{r[0],r[1]},{r[0],r[3]},{r[2],r[1]},{r[2],r[3]}}
for _, p := range pts {
if s[p] { delete(s, p) } else { s[p] = true }
}
}
if area != (maxx-minx)*(maxy-miny) { return false }
if len(s) != 4 { return false }
for _, p := range [][2]int{{minx,miny},{minx,maxy},{maxx,miny},{maxx,maxy}} {
if !s[p] { return false }
}
return true
}
func min(a, b int) int { if a < b { return a } else { return b } }
func max(a, b int) int { if a > b { return a } else { return b } }
|