Hard
Minimum Space Wasted From Packaging — C++
Full explanation · Time O(mlogm + nlogn + mlogn) · Space O(1)
// Time: O(mlogm + nlogn + mlogn)
// Space: O(1)
class Solution {
public:
int minWastedSpace(vector<int>& packages, vector<vector<int>>& boxes) {
static const int MOD = 1e9 + 7;
static const int64_t INF = numeric_limits<int64_t>::max();
sort(begin(packages), end(packages));
int64_t result = INF;
for (auto& box : boxes) {
sort(begin(box), end(box));
if (box.back() < packages.back()) {
continue;
}
int64_t curr = 0;
auto left = cbegin(packages);
for (const auto& b : box) {
auto right = upper_bound(left, cend(packages), b);
curr += b * (right - left);
left = right;
}
result = min(result, curr);
}
int64_t total = accumulate(cbegin(packages), cend(packages), 0LL);
return result != INF ? (result - total) % MOD : -1;
}
};