Problem · Array

Minimum Total Packaging Effort

Learn this problem
HardAmazonFULLTIMEOA
See Amazon hiring insights

Problem statement

Amazon operates multiple fulfillment centers. Each center follows a special packaging rule.

You are given:

  • An integer list packEffort of size m where packEffort[i] is the packaging effort required for the i-th item.
  • An integer list packageCount of size n where packageCount[i] indicates that at the i-th fulfillment center, if you pay to package at least packageCount[i] items, you get 2 extra items for free. The 2 bonus (free) items must each have a packaging effort less than or equal to the smallest effort among the paid items at that center.

You can use any fulfillment center once or not at all.

Return the minimum total packaging effort required to package all m items using any number of fulfillment centers.

Function

minTotalPackagingEffort(packEffort: List<Integer>, packageCount: List<Integer>) → int

Examples

Example 1

packEffort = [50, 50, 30, 50, 20]packageCount = [2, 3]return = 120
Choose the fulfillment center with packageCount = 2. Pay for 2 items with cost 50 each → min = 50 Take 2 items for free with effort ≤ 50 → pick 30 and 50 Remaining item is 20 → pay for it Total effort: 50 + 50 + 20 = 120

Constraints

  • 1 ≤ n ≤ 10^5
  • 1 ≤ m ≤ 10^5
  • 0 ≤ packEffort[i] ≤ 10^4
  • Each item must be packaged exactly once.

More Amazon problems

drafts saved locally
public int minTotalPackagingEffort(List<Integer> packEffort, List<Integer> packageCount) {
  // write your code here
}
packEffort[50, 50, 30, 50, 20]
packageCount[2, 3]
expected120
checking account