Skip to content

Commit 8d89451

Browse files
authored
feat: add solutions to lc problem: No.1959
No.1959.Minimum Total Space Wasted With K Resizing Operations
1 parent bb0b29a commit 8d89451

File tree

7 files changed

+400
-2
lines changed

7 files changed

+400
-2
lines changed

solution/1900-1999/1958.Check if Move is Legal/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252

5353
<!-- 这里可写通用的实现逻辑 -->
5454

55+
**方法一:动态规划**
56+
5557
<!-- tabs:start -->
5658

5759
### **Python3**

solution/1900-1999/1959.Minimum Total Space Wasted With K Resizing Operations/README.md

Lines changed: 137 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,158 @@
5757

5858
<!-- 这里可写通用的实现逻辑 -->
5959

60+
**方法一:动态规划**
61+
6062
<!-- tabs:start -->
6163

6264
### **Python3**
6365

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

6668
```python
67-
69+
class Solution:
70+
def minSpaceWastedKResizing(self, nums: List[int], k: int) -> int:
71+
k += 1
72+
n = len(nums)
73+
g = [[0] * n for _ in range(n)]
74+
for i in range(n):
75+
s = mx = 0
76+
for j in range(i, n):
77+
s += nums[j]
78+
mx = max(mx, nums[j])
79+
g[i][j] = mx * (j - i + 1) - s
80+
f = [[inf] * (k + 1) for _ in range(n + 1)]
81+
f[0][0] = 0
82+
for i in range(1, n + 1):
83+
for j in range(1, k + 1):
84+
for h in range(i):
85+
f[i][j] = min(f[i][j], f[h][j - 1] + g[h][i - 1])
86+
return f[-1][-1]
6887
```
6988

7089
### **Java**
7190

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

7493
```java
94+
class Solution {
95+
public int minSpaceWastedKResizing(int[] nums, int k) {
96+
++k;
97+
int n = nums.length;
98+
int[][] g = new int[n][n];
99+
for (int i = 0; i < n; ++i) {
100+
int s = 0, mx = 0;
101+
for (int j = i; j < n; ++j) {
102+
s += nums[j];
103+
mx = Math.max(mx, nums[j]);
104+
g[i][j] = mx * (j - i + 1) - s;
105+
}
106+
}
107+
int[][] f = new int[n + 1][k + 1];
108+
int inf = 0x3f3f3f3f;
109+
for (int i = 0; i < f.length; ++i) {
110+
Arrays.fill(f[i], inf);
111+
}
112+
f[0][0] = 0;
113+
for (int i = 1; i <= n; ++i) {
114+
for (int j = 1; j <= k; ++j) {
115+
for (int h = 0; h < i; ++h) {
116+
f[i][j] = Math.min(f[i][j], f[h][j - 1] + g[h][i - 1]);
117+
}
118+
}
119+
}
120+
return f[n][k];
121+
}
122+
}
123+
```
124+
125+
### **C++**
126+
127+
```cpp
128+
class Solution {
129+
public:
130+
int minSpaceWastedKResizing(vector<int>& nums, int k) {
131+
++k;
132+
int n = nums.size();
133+
vector<vector<int>> g(n, vector<int>(n));
134+
for (int i = 0; i < n; ++i)
135+
{
136+
int s = 0, mx = 0;
137+
for (int j = i; j < n; ++j)
138+
{
139+
mx = max(mx, nums[j]);
140+
s += nums[j];
141+
g[i][j] = mx * (j - i + 1) - s;
142+
}
143+
}
144+
int inf = 0x3f3f3f3f;
145+
vector<vector<int>> f(n + 1, vector<int>(k + 1, inf));
146+
f[0][0] = 0;
147+
for (int i = 1; i <= n; ++i)
148+
{
149+
for (int j = 1; j <= k; ++j)
150+
{
151+
for (int h = 0; h < i; ++h)
152+
{
153+
f[i][j] = min(f[i][j], f[h][j - 1] + g[h][i - 1]);
154+
}
155+
}
156+
}
157+
return f[n][k];
158+
}
159+
};
160+
```
75161
162+
### **Go**
163+
164+
```go
165+
func minSpaceWastedKResizing(nums []int, k int) int {
166+
k++
167+
n := len(nums)
168+
g := make([][]int, n)
169+
for i := range g {
170+
g[i] = make([]int, n)
171+
}
172+
for i := 0; i < n; i++ {
173+
s, mx := 0, 0
174+
for j := i; j < n; j++ {
175+
s += nums[j]
176+
mx = max(mx, nums[j])
177+
g[i][j] = mx*(j-i+1) - s
178+
}
179+
}
180+
f := make([][]int, n+1)
181+
inf := 0x3f3f3f3f
182+
for i := range f {
183+
f[i] = make([]int, k+1)
184+
for j := range f[i] {
185+
f[i][j] = inf
186+
}
187+
}
188+
f[0][0] = 0
189+
for i := 1; i <= n; i++ {
190+
for j := 1; j <= k; j++ {
191+
for h := 0; h < i; h++ {
192+
f[i][j] = min(f[i][j], f[h][j-1]+g[h][i-1])
193+
}
194+
}
195+
}
196+
return f[n][k]
197+
}
198+
199+
func max(a, b int) int {
200+
if a > b {
201+
return a
202+
}
203+
return b
204+
}
205+
206+
func min(a, b int) int {
207+
if a < b {
208+
return a
209+
}
210+
return b
211+
}
76212
```
77213

78214
### **...**

solution/1900-1999/1959.Minimum Total Space Wasted With K Resizing Operations/README_EN.md

Lines changed: 135 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,147 @@ The total wasted space is (10 - 10) + (20 - 20) + (20 - 15) + (30 - 30) + (30 -
5959
### **Python3**
6060

6161
```python
62-
62+
class Solution:
63+
def minSpaceWastedKResizing(self, nums: List[int], k: int) -> int:
64+
k += 1
65+
n = len(nums)
66+
g = [[0] * n for _ in range(n)]
67+
for i in range(n):
68+
s = mx = 0
69+
for j in range(i, n):
70+
s += nums[j]
71+
mx = max(mx, nums[j])
72+
g[i][j] = mx * (j - i + 1) - s
73+
f = [[inf] * (k + 1) for _ in range(n + 1)]
74+
f[0][0] = 0
75+
for i in range(1, n + 1):
76+
for j in range(1, k + 1):
77+
for h in range(i):
78+
f[i][j] = min(f[i][j], f[h][j - 1] + g[h][i - 1])
79+
return f[-1][-1]
6380
```
6481

6582
### **Java**
6683

6784
```java
85+
class Solution {
86+
public int minSpaceWastedKResizing(int[] nums, int k) {
87+
++k;
88+
int n = nums.length;
89+
int[][] g = new int[n][n];
90+
for (int i = 0; i < n; ++i) {
91+
int s = 0, mx = 0;
92+
for (int j = i; j < n; ++j) {
93+
s += nums[j];
94+
mx = Math.max(mx, nums[j]);
95+
g[i][j] = mx * (j - i + 1) - s;
96+
}
97+
}
98+
int[][] f = new int[n + 1][k + 1];
99+
int inf = 0x3f3f3f3f;
100+
for (int i = 0; i < f.length; ++i) {
101+
Arrays.fill(f[i], inf);
102+
}
103+
f[0][0] = 0;
104+
for (int i = 1; i <= n; ++i) {
105+
for (int j = 1; j <= k; ++j) {
106+
for (int h = 0; h < i; ++h) {
107+
f[i][j] = Math.min(f[i][j], f[h][j - 1] + g[h][i - 1]);
108+
}
109+
}
110+
}
111+
return f[n][k];
112+
}
113+
}
114+
```
115+
116+
### **C++**
117+
118+
```cpp
119+
class Solution {
120+
public:
121+
int minSpaceWastedKResizing(vector<int>& nums, int k) {
122+
++k;
123+
int n = nums.size();
124+
vector<vector<int>> g(n, vector<int>(n));
125+
for (int i = 0; i < n; ++i)
126+
{
127+
int s = 0, mx = 0;
128+
for (int j = i; j < n; ++j)
129+
{
130+
mx = max(mx, nums[j]);
131+
s += nums[j];
132+
g[i][j] = mx * (j - i + 1) - s;
133+
}
134+
}
135+
int inf = 0x3f3f3f3f;
136+
vector<vector<int>> f(n + 1, vector<int>(k + 1, inf));
137+
f[0][0] = 0;
138+
for (int i = 1; i <= n; ++i)
139+
{
140+
for (int j = 1; j <= k; ++j)
141+
{
142+
for (int h = 0; h < i; ++h)
143+
{
144+
f[i][j] = min(f[i][j], f[h][j - 1] + g[h][i - 1]);
145+
}
146+
}
147+
}
148+
return f[n][k];
149+
}
150+
};
151+
```
68152
153+
### **Go**
154+
155+
```go
156+
func minSpaceWastedKResizing(nums []int, k int) int {
157+
k++
158+
n := len(nums)
159+
g := make([][]int, n)
160+
for i := range g {
161+
g[i] = make([]int, n)
162+
}
163+
for i := 0; i < n; i++ {
164+
s, mx := 0, 0
165+
for j := i; j < n; j++ {
166+
s += nums[j]
167+
mx = max(mx, nums[j])
168+
g[i][j] = mx*(j-i+1) - s
169+
}
170+
}
171+
f := make([][]int, n+1)
172+
inf := 0x3f3f3f3f
173+
for i := range f {
174+
f[i] = make([]int, k+1)
175+
for j := range f[i] {
176+
f[i][j] = inf
177+
}
178+
}
179+
f[0][0] = 0
180+
for i := 1; i <= n; i++ {
181+
for j := 1; j <= k; j++ {
182+
for h := 0; h < i; h++ {
183+
f[i][j] = min(f[i][j], f[h][j-1]+g[h][i-1])
184+
}
185+
}
186+
}
187+
return f[n][k]
188+
}
189+
190+
func max(a, b int) int {
191+
if a > b {
192+
return a
193+
}
194+
return b
195+
}
196+
197+
func min(a, b int) int {
198+
if a < b {
199+
return a
200+
}
201+
return b
202+
}
69203
```
70204

71205
### **...**
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
class Solution {
2+
public:
3+
int minSpaceWastedKResizing(vector<int>& nums, int k) {
4+
++k;
5+
int n = nums.size();
6+
vector<vector<int>> g(n, vector<int>(n));
7+
for (int i = 0; i < n; ++i)
8+
{
9+
int s = 0, mx = 0;
10+
for (int j = i; j < n; ++j)
11+
{
12+
mx = max(mx, nums[j]);
13+
s += nums[j];
14+
g[i][j] = mx * (j - i + 1) - s;
15+
}
16+
}
17+
int inf = 0x3f3f3f3f;
18+
vector<vector<int>> f(n + 1, vector<int>(k + 1, inf));
19+
f[0][0] = 0;
20+
for (int i = 1; i <= n; ++i)
21+
{
22+
for (int j = 1; j <= k; ++j)
23+
{
24+
for (int h = 0; h < i; ++h)
25+
{
26+
f[i][j] = min(f[i][j], f[h][j - 1] + g[h][i - 1]);
27+
}
28+
}
29+
}
30+
return f[n][k];
31+
}
32+
};

0 commit comments

Comments
 (0)