3
3
// #Hard #Array #Matrix #Enumeration #2024_06_26_Time_10_ms_(99.66%)_Space_44.1_MB_(85.42%)
4
4
5
5
public class Solution {
6
- private int [][] ruc ; // rectangle unit count
6
+ // rectangle unit count
7
+ private int [][] ruc ;
7
8
private int height ;
8
9
private int width ;
9
10
@@ -13,67 +14,93 @@ private int unitsInRectangle(int r0, int c0, int r1, int c1) {
13
14
}
14
15
15
16
private int minArea (int r0 , int c0 , int r1 , int c1 ) {
16
- if (unitsInRectangle (r0 , c0 , r1 , c1 ) == 0 ) return 0 ;
17
+ if (unitsInRectangle (r0 , c0 , r1 , c1 ) == 0 ) {
18
+ return 0 ;
19
+ }
17
20
int minRow = r0 ;
18
- while (unitsInRectangle (r0 , c0 , minRow + 1 , c1 ) == 0 ) minRow ++;
21
+ while (unitsInRectangle (r0 , c0 , minRow + 1 , c1 ) == 0 ) {
22
+ minRow ++;
23
+ }
19
24
int maxRow = r1 - 1 ;
20
- while (unitsInRectangle (maxRow , c0 , r1 , c1 ) == 0 ) maxRow --;
25
+ while (unitsInRectangle (maxRow , c0 , r1 , c1 ) == 0 ) {
26
+ maxRow --;
27
+ }
21
28
int minCol = c0 ;
22
- while (unitsInRectangle (r0 , c0 , r1 , minCol + 1 ) == 0 ) minCol ++;
29
+ while (unitsInRectangle (r0 , c0 , r1 , minCol + 1 ) == 0 ) {
30
+ minCol ++;
31
+ }
23
32
int maxCol = c1 - 1 ;
24
- while (unitsInRectangle (r0 , maxCol , r1 , c1 ) == 0 ) maxCol --;
33
+ while (unitsInRectangle (r0 , maxCol , r1 , c1 ) == 0 ) {
34
+ maxCol --;
35
+ }
25
36
return (maxRow - minRow + 1 ) * (maxCol - minCol + 1 );
26
37
}
27
38
28
39
private int minSum2 (int r0 , int c0 , int r1 , int c1 , boolean splitVertical ) {
29
40
int min = Integer .MAX_VALUE ;
30
- if (splitVertical )
41
+ if (splitVertical ) {
31
42
for (int c = c0 + 1 ; c < c1 ; c ++) {
32
43
int a1 = minArea (r0 , c0 , r1 , c );
33
44
if (a1 == 0 ) continue ;
34
45
int a2 = minArea (r0 , c , r1 , c1 );
35
46
if (a2 != 0 ) min = Math .min (min , a1 + a2 );
36
47
}
37
- else
48
+ } else
38
49
for (int r = r0 + 1 ; r < r1 ; r ++) {
39
50
int a1 = minArea (r0 , c0 , r , c1 );
40
- if (a1 == 0 ) continue ;
51
+ if (a1 == 0 ) {
52
+ continue ;
53
+ }
41
54
int a2 = minArea (r , c0 , r1 , c1 );
42
- if (a2 != 0 ) min = Math .min (min , a1 + a2 );
55
+ if (a2 != 0 ) {
56
+ min = Math .min (min , a1 + a2 );
57
+ }
43
58
}
44
59
return min ;
45
60
}
46
61
47
62
private int minSum3 (
48
63
boolean firstSplitVertical , boolean takeLower , boolean secondSplitVertical ) {
49
64
int min = Integer .MAX_VALUE ;
50
- if (firstSplitVertical )
65
+ if (firstSplitVertical ) {
51
66
for (int c = 1 ; c < width ; c ++) {
52
- int a1 , a2 ;
67
+ int a1 ;
68
+ int a2 ;
53
69
if (takeLower ) {
54
70
a1 = minArea (0 , 0 , height , c );
55
- if (a1 == 0 ) continue ;
71
+ if (a1 == 0 ) {
72
+ continue ;
73
+ }
56
74
a2 = minSum2 (0 , c , height , width , secondSplitVertical );
57
75
} else {
58
76
a1 = minArea (0 , c , height , width );
59
- if (a1 == 0 ) continue ;
77
+ if (a1 == 0 ) {
78
+ continue ;
79
+ }
60
80
a2 = minSum2 (0 , 0 , height , c , secondSplitVertical );
61
81
}
62
82
if (a2 != Integer .MAX_VALUE ) min = Math .min (min , a1 + a2 );
63
83
}
64
- else
84
+ } else
65
85
for (int r = 1 ; r < height ; r ++) {
66
- int a1 , a2 ;
86
+ int a1 ;
87
+ int a2 ;
67
88
if (takeLower ) {
68
89
a1 = minArea (0 , 0 , r , width );
69
- if (a1 == 0 ) continue ;
90
+ if (a1 == 0 ) {
91
+ continue ;
92
+ }
70
93
a2 = minSum2 (r , 0 , height , width , secondSplitVertical );
71
94
} else {
72
95
a1 = minArea (r , 0 , height , width );
73
- if (a1 == 0 ) continue ;
96
+ if (a1 == 0 ) {
97
+ continue ;
98
+ }
74
99
a2 = minSum2 (0 , 0 , r , width , secondSplitVertical );
75
100
}
76
- if (a2 != Integer .MAX_VALUE ) min = Math .min (min , a1 + a2 );
101
+ if (a2 != Integer .MAX_VALUE ) {
102
+ min = Math .min (min , a1 + a2 );
103
+ }
77
104
}
78
105
return min ;
79
106
}
0 commit comments