Skip to content

Commit be359b2

Browse files
committed
Improved task 3469
1 parent 4c5f25d commit be359b2

File tree

1 file changed

+22
-17
lines changed
  • src/main/java/g3401_3500/s3469_find_minimum_cost_to_remove_array_elements

1 file changed

+22
-17
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,34 @@
11
package g3401_3500.s3469_find_minimum_cost_to_remove_array_elements;
22

3-
// #Medium #2025_03_02_Time_540_ms_(100.00%)_Space_57.03_MB_(100.00%)
3+
// #Medium #2025_03_05_Time_12_ms_(100.00%)_Space_45.56_MB_(96.22%)
44

55
import java.util.Arrays;
66

77
public class Solution {
8-
private int[][] dp;
8+
private static final int INF = (int) 1e9;
99

1010
public int minCost(int[] nums) {
11-
dp = new int[1001][1001];
12-
Arrays.stream(dp).forEach(row -> Arrays.fill(row, -1));
13-
return solve(nums, 1, 0);
14-
}
15-
16-
private int solve(int[] nums, int i, int last) {
17-
if (i + 1 >= nums.length) {
18-
return Math.max(nums[last], (i < nums.length ? nums[i] : 0));
11+
int n = nums.length;
12+
if (n % 2 == 0) {
13+
nums = Arrays.copyOf(nums, ++n);
14+
}
15+
int[] dp = new int[n];
16+
for (int j = 1; j < n - 1; j += 2) {
17+
int cost1 = INF;
18+
int cost2 = INF;
19+
int max = Math.max(nums[j], nums[j + 1]);
20+
for (int i = 0; i < j; ++i) {
21+
cost1 = Math.min(cost1, dp[i] + Math.max(nums[i], nums[j + 1]));
22+
cost2 = Math.min(cost2, dp[i] + Math.max(nums[i], nums[j]));
23+
dp[i] += max;
24+
}
25+
dp[j] = cost1;
26+
dp[j + 1] = cost2;
1927
}
20-
if (dp[i][last] != -1) {
21-
return dp[i][last];
28+
int result = INF;
29+
for (int i = 0; i < n; ++i) {
30+
result = Math.min(result, dp[i] + nums[i]);
2231
}
23-
int res = Math.max(nums[i], nums[i + 1]) + solve(nums, i + 2, last);
24-
res = Math.min(res, Math.max(nums[i], nums[last]) + solve(nums, i + 2, i + 1));
25-
res = Math.min(res, Math.max(nums[i + 1], nums[last]) + solve(nums, i + 2, i));
26-
dp[i][last] = res;
27-
return res;
32+
return result;
2833
}
2934
}

0 commit comments

Comments
 (0)