Skip to content

Commit 060bcd5

Browse files
committed
feat: add solutions to lc problem: No.1465
No.1465.Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts
1 parent 616ded2 commit 060bcd5

File tree

6 files changed

+234
-2
lines changed

6 files changed

+234
-2
lines changed

solution/1400-1499/1465.Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts/README.md

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,22 +61,106 @@
6161

6262
<!-- 这里可写通用的实现逻辑 -->
6363

64+
**方法一:排序**
65+
66+
先分别对 `horizontalCuts``verticalCuts` 排序,然后遍历数组,计算相邻两个元素的差值,取最大值的乘积即可。
67+
68+
时间复杂度 $O(n\log n)$。
69+
6470
<!-- tabs:start -->
6571

6672
### **Python3**
6773

6874
<!-- 这里可写当前语言的特殊实现逻辑 -->
6975

7076
```python
71-
77+
class Solution:
78+
def maxArea(self, h: int, w: int, horizontalCuts: List[int], verticalCuts: List[int]) -> int:
79+
horizontalCuts.extend([0, h])
80+
verticalCuts.extend([0, w])
81+
horizontalCuts.sort()
82+
verticalCuts.sort()
83+
x = max(b - a for a, b in pairwise(horizontalCuts))
84+
y = max(b - a for a, b in pairwise(verticalCuts))
85+
return (x * y) % (10**9 + 7)
7286
```
7387

7488
### **Java**
7589

7690
<!-- 这里可写当前语言的特殊实现逻辑 -->
7791

7892
```java
93+
class Solution {
94+
private static final int MOD = (int) 1e9 + 7;
95+
96+
public int maxArea(int h, int w, int[] horizontalCuts, int[] verticalCuts) {
97+
Arrays.sort(horizontalCuts);
98+
Arrays.sort(verticalCuts);
99+
int m = horizontalCuts.length;
100+
int n = verticalCuts.length;
101+
long x = Math.max(horizontalCuts[0], h - horizontalCuts[m - 1]);
102+
long y = Math.max(verticalCuts[0], w - verticalCuts[n - 1]);
103+
for (int i = 1; i < m; ++i) {
104+
x = Math.max(x, horizontalCuts[i] - horizontalCuts[i - 1]);
105+
}
106+
for (int i = 1; i < n; ++i) {
107+
y = Math.max(y, verticalCuts[i] - verticalCuts[i - 1]);
108+
}
109+
return (int) ((x * y) % MOD);
110+
}
111+
}
112+
```
113+
114+
### **C++**
115+
116+
```cpp
117+
class Solution {
118+
public:
119+
int maxArea(int h, int w, vector<int>& horizontalCuts, vector<int>& verticalCuts) {
120+
horizontalCuts.push_back(0);
121+
horizontalCuts.push_back(h);
122+
verticalCuts.push_back(0);
123+
verticalCuts.push_back(w);
124+
sort(horizontalCuts.begin(), horizontalCuts.end());
125+
sort(verticalCuts.begin(), verticalCuts.end());
126+
int x = 0, y = 0;
127+
for (int i = 1; i < horizontalCuts.size(); ++i) {
128+
x = max(x, horizontalCuts[i] - horizontalCuts[i - 1]);
129+
}
130+
for (int i = 1; i < verticalCuts.size(); ++i) {
131+
y = max(y, verticalCuts[i] - verticalCuts[i - 1]);
132+
}
133+
int mod = 1e9 + 7;
134+
return (int) ((1ll * x * y) % mod);
135+
}
136+
};
137+
```
79138
139+
### **Go**
140+
141+
```go
142+
func maxArea(h int, w int, horizontalCuts []int, verticalCuts []int) int {
143+
horizontalCuts = append(horizontalCuts, []int{0, h}...)
144+
verticalCuts = append(verticalCuts, []int{0, w}...)
145+
sort.Ints(horizontalCuts)
146+
sort.Ints(verticalCuts)
147+
x, y := 0, 0
148+
mod := int(1e9) + 7
149+
for i := 1; i < len(horizontalCuts); i++ {
150+
x = max(x, horizontalCuts[i]-horizontalCuts[i-1])
151+
}
152+
for i := 1; i < len(verticalCuts); i++ {
153+
y = max(y, verticalCuts[i]-verticalCuts[i-1])
154+
}
155+
return (x * y) % mod
156+
}
157+
158+
func max(a, b int) int {
159+
if a > b {
160+
return a
161+
}
162+
return b
163+
}
80164
```
81165

82166
### **...**

solution/1400-1499/1465.Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts/README_EN.md

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,91 @@
5757
### **Python3**
5858

5959
```python
60-
60+
class Solution:
61+
def maxArea(self, h: int, w: int, horizontalCuts: List[int], verticalCuts: List[int]) -> int:
62+
horizontalCuts.extend([0, h])
63+
verticalCuts.extend([0, w])
64+
horizontalCuts.sort()
65+
verticalCuts.sort()
66+
x = max(b - a for a, b in pairwise(horizontalCuts))
67+
y = max(b - a for a, b in pairwise(verticalCuts))
68+
return (x * y) % (10**9 + 7)
6169
```
6270

6371
### **Java**
6472

6573
```java
74+
class Solution {
75+
private static final int MOD = (int) 1e9 + 7;
76+
77+
public int maxArea(int h, int w, int[] horizontalCuts, int[] verticalCuts) {
78+
Arrays.sort(horizontalCuts);
79+
Arrays.sort(verticalCuts);
80+
int m = horizontalCuts.length;
81+
int n = verticalCuts.length;
82+
long x = Math.max(horizontalCuts[0], h - horizontalCuts[m - 1]);
83+
long y = Math.max(verticalCuts[0], w - verticalCuts[n - 1]);
84+
for (int i = 1; i < m; ++i) {
85+
x = Math.max(x, horizontalCuts[i] - horizontalCuts[i - 1]);
86+
}
87+
for (int i = 1; i < n; ++i) {
88+
y = Math.max(y, verticalCuts[i] - verticalCuts[i - 1]);
89+
}
90+
return (int) ((x * y) % MOD);
91+
}
92+
}
93+
```
94+
95+
### **C++**
96+
97+
```cpp
98+
class Solution {
99+
public:
100+
int maxArea(int h, int w, vector<int>& horizontalCuts, vector<int>& verticalCuts) {
101+
horizontalCuts.push_back(0);
102+
horizontalCuts.push_back(h);
103+
verticalCuts.push_back(0);
104+
verticalCuts.push_back(w);
105+
sort(horizontalCuts.begin(), horizontalCuts.end());
106+
sort(verticalCuts.begin(), verticalCuts.end());
107+
int x = 0, y = 0;
108+
for (int i = 1; i < horizontalCuts.size(); ++i) {
109+
x = max(x, horizontalCuts[i] - horizontalCuts[i - 1]);
110+
}
111+
for (int i = 1; i < verticalCuts.size(); ++i) {
112+
y = max(y, verticalCuts[i] - verticalCuts[i - 1]);
113+
}
114+
int mod = 1e9 + 7;
115+
return (int) ((1ll * x * y) % mod);
116+
}
117+
};
118+
```
66119
120+
### **Go**
121+
122+
```go
123+
func maxArea(h int, w int, horizontalCuts []int, verticalCuts []int) int {
124+
horizontalCuts = append(horizontalCuts, []int{0, h}...)
125+
verticalCuts = append(verticalCuts, []int{0, w}...)
126+
sort.Ints(horizontalCuts)
127+
sort.Ints(verticalCuts)
128+
x, y := 0, 0
129+
mod := int(1e9) + 7
130+
for i := 1; i < len(horizontalCuts); i++ {
131+
x = max(x, horizontalCuts[i]-horizontalCuts[i-1])
132+
}
133+
for i := 1; i < len(verticalCuts); i++ {
134+
y = max(y, verticalCuts[i]-verticalCuts[i-1])
135+
}
136+
return (x * y) % mod
137+
}
138+
139+
func max(a, b int) int {
140+
if a > b {
141+
return a
142+
}
143+
return b
144+
}
67145
```
68146

69147
### **...**
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public:
3+
int maxArea(int h, int w, vector<int>& horizontalCuts, vector<int>& verticalCuts) {
4+
horizontalCuts.push_back(0);
5+
horizontalCuts.push_back(h);
6+
verticalCuts.push_back(0);
7+
verticalCuts.push_back(w);
8+
sort(horizontalCuts.begin(), horizontalCuts.end());
9+
sort(verticalCuts.begin(), verticalCuts.end());
10+
int x = 0, y = 0;
11+
for (int i = 1; i < horizontalCuts.size(); ++i) {
12+
x = max(x, horizontalCuts[i] - horizontalCuts[i - 1]);
13+
}
14+
for (int i = 1; i < verticalCuts.size(); ++i) {
15+
y = max(y, verticalCuts[i] - verticalCuts[i - 1]);
16+
}
17+
int mod = 1e9 + 7;
18+
return (int) ((1ll * x * y) % mod);
19+
}
20+
};
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
func maxArea(h int, w int, horizontalCuts []int, verticalCuts []int) int {
2+
horizontalCuts = append(horizontalCuts, []int{0, h}...)
3+
verticalCuts = append(verticalCuts, []int{0, w}...)
4+
sort.Ints(horizontalCuts)
5+
sort.Ints(verticalCuts)
6+
x, y := 0, 0
7+
mod := int(1e9) + 7
8+
for i := 1; i < len(horizontalCuts); i++ {
9+
x = max(x, horizontalCuts[i]-horizontalCuts[i-1])
10+
}
11+
for i := 1; i < len(verticalCuts); i++ {
12+
y = max(y, verticalCuts[i]-verticalCuts[i-1])
13+
}
14+
return (x * y) % mod
15+
}
16+
17+
func max(a, b int) int {
18+
if a > b {
19+
return a
20+
}
21+
return b
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
private static final int MOD = (int) 1e9 + 7;
3+
4+
public int maxArea(int h, int w, int[] horizontalCuts, int[] verticalCuts) {
5+
Arrays.sort(horizontalCuts);
6+
Arrays.sort(verticalCuts);
7+
int m = horizontalCuts.length;
8+
int n = verticalCuts.length;
9+
long x = Math.max(horizontalCuts[0], h - horizontalCuts[m - 1]);
10+
long y = Math.max(verticalCuts[0], w - verticalCuts[n - 1]);
11+
for (int i = 1; i < m; ++i) {
12+
x = Math.max(x, horizontalCuts[i] - horizontalCuts[i - 1]);
13+
}
14+
for (int i = 1; i < n; ++i) {
15+
y = Math.max(y, verticalCuts[i] - verticalCuts[i - 1]);
16+
}
17+
return (int) ((x * y) % MOD);
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def maxArea(self, h: int, w: int, horizontalCuts: List[int], verticalCuts: List[int]) -> int:
3+
horizontalCuts.extend([0, h])
4+
verticalCuts.extend([0, w])
5+
horizontalCuts.sort()
6+
verticalCuts.sort()
7+
x = max(b - a for a, b in pairwise(horizontalCuts))
8+
y = max(b - a for a, b in pairwise(verticalCuts))
9+
return (x * y) % (10**9 + 7)

0 commit comments

Comments
 (0)