Medium
You are given two integer arrays costs and capacity, both of length n, where costs[i] represents the purchase cost of the ith machine and capacity[i] represents its performance capacity.
You are also given an integer budget.
You may select at most two distinct machines such that the total cost of the selected machines is strictly less than budget.
Return the maximum achievable total capacity of the selected machines.
Example 1:
Input: costs = [4,8,5,3], capacity = [1,5,2,7], budget = 8
Output: 8
Explanation:
costs[0] = 4 and costs[3] = 3.4 + 3 = 7, which is strictly less than budget = 8.capacity[0] + capacity[3] = 1 + 7 = 8.Example 2:
Input: costs = [3,5,7,4], capacity = [2,4,3,6], budget = 7
Output: 6
Explanation:
costs[3] = 4.budget = 7.capacity[3] = 6.Example 3:
Input: costs = [2,2,2], capacity = [3,5,4], budget = 5
Output: 9
Explanation:
costs[1] = 2 and costs[2] = 2.2 + 2 = 4, which is strictly less than budget = 5.capacity[1] + capacity[2] = 5 + 4 = 9.Constraints:
1 <= n == costs.length == capacity.length <= 1051 <= costs[i], capacity[i] <= 1051 <= budget <= 2 * 105import kotlin.math.max
import kotlin.math.min
class Solution {
fun maxCapacity(costs: IntArray, capacity: IntArray, budget: Int): Int {
val mxCap = IntArray(budget)
var maxCap = 0
for (i in costs.indices) {
val cost = costs[i]
val cap = capacity[i]
if (cost >= budget) {
continue
}
maxCap = max(maxCap, cap)
if (cost * 2 < budget) {
maxCap = max(maxCap, mxCap[cost] + cap)
}
if (cap > mxCap[cost]) {
mxCap[cost] = cap
}
}
val preSum = IntArray(budget)
for (i in 1..<budget) {
val rem = min(budget - i - 1, i - 1)
maxCap = max(maxCap, mxCap[i] + preSum[rem])
preSum[i] = max(preSum[i - 1], mxCap[i])
}
return maxCap
}
}