Skip to content

Commit 9f9edb0

Browse files
committed
Added Tallest Billboard.java
1 parent 157f7bf commit 9f9edb0

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

Hard/Tallest Billboard.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class Solution {
2+
public int tallestBillboard(int[] rods) {
3+
int n = rods.length;
4+
Map<Integer, Integer> firstHalf = helper(rods, 0, n / 2);
5+
Map<Integer, Integer> secondHalf = helper(rods, n / 2, n);
6+
int result = 0;
7+
for (Integer difference : firstHalf.keySet()) {
8+
if (secondHalf.containsKey(-1 * difference)) {
9+
result = Math.max(result, firstHalf.get(difference) + secondHalf.get(-1 * difference));
10+
}
11+
}
12+
return result;
13+
}
14+
15+
private Map<Integer, Integer> helper(int[] rods, int leftIdx, int rightIdx) {
16+
Set<Pair<Integer, Integer>> states = new HashSet<>();
17+
states.add(new Pair(0, 0));
18+
for (int i = leftIdx; i < rightIdx; i++) {
19+
int rod = rods[i];
20+
Set<Pair<Integer, Integer>> newStates = new HashSet<>();
21+
for (Pair<Integer, Integer> state : states) {
22+
newStates.add(new Pair(state.getKey() + rod, state.getValue()));
23+
newStates.add(new Pair(state.getKey(), state.getValue() + rod));
24+
}
25+
states.addAll(newStates);
26+
}
27+
Map<Integer, Integer> dp = new HashMap<>();
28+
for (Pair<Integer, Integer> pair : states) {
29+
Integer left = pair.getKey();
30+
Integer right = pair.getValue();
31+
dp.put(left - right, Math.max(dp.getOrDefault(left - right, 0), left));
32+
}
33+
return dp;
34+
}
35+
}

0 commit comments

Comments
 (0)