AMAZON Coding Question – Solved

5 Live
The manager of an Amazon warehouse needs to ship n products from different locations, the location of the th product is represented by an array locations[i]. The manager is allowed to perform one operation at a time. Each operation is described below - If the inventory has two or more products. the manager can pick two products x and y from the inventory if they have different locations. i.e. locations[x] != locations[y] and ship both of them. - If the inventory has one or more products, the manager can pick one product x from the inventory and ship it. Note: After shipping a product it gets removed from the inventory, and the rest of the products which are currently not shipped come together keeping the order the same as before. Given n products and an array locations, find the minimum number of operations that the manager has to perform to ship all of the products Example: Given n=5 and locations=[1,8, 6, 7, 7]. The manager needs to perform 3 operations to ship all of the products. Function Description Complete the function minOperation in the editor below. minOperation has the following parameter(s): int locations[n]: the location of each products. Returns int: the minimum number of operations that locations

Asked in: AMAZON

Image of the Question

Question Image Question Image

All Testcases Passed ✔



Passcode Image

Solution


import heapq
def minOperation(locations):
    temp = {}
    for i in locations:
// ... rest of solution available after purchase

🔒 Please login to view the solution

Explanation


```
To solve this problem, the first step is to understand the rules for how shipping operations work. The manager has two options:

1. Ship a single product in one operation.
2. Ship two products together in one operation, but only if they come from **different locations**.

The goal is to minimize the **total number of operations** required to ship all products in the `locations` array. So the real challenge is to find the **best way to pair up products from different locations**, such that the number of single shipments is minimized.

Start by considering the implication of the pairing rule. Since the manager can only pair products from **different** locations, any two products from the same location **cannot be shipped together** in one operation. This means that the more you have of a certain location, the harder it becomes to pair those products — especially if that location appears many more times than others.

So the strategy needs to revolve around **balancing** and **pairing** items from different locations as much as possible.

A useful way to structure your approach is to:
- Count how many products exist for each location.
- Identify the location that appears **most frequently** — call this the **maximum frequency**.
- Try to find the most efficient way to pair the products from that most frequent location with products from other locations.

Let’s analyze what happens when the most frequent location has a count that’s **greater than the total number of other products**. In this case, some products from that location **must** be shipped alone, because there simply aren’t enough different-location products to pair with. This gives you a natural lower bound on how many single operations you'll need.

To better formalize this idea, say:
- `n` is the total number of products.
- `maxFreq` is the highest count of any single location.
- `rest = n - maxFreq` is the total number of all other products.

Now, you can ask yourself: how many **valid pairs** can I make with products from the most frequent location and all the others?

You can pair `rest` products with `rest` of the `maxFreq` products (since each pair must consist of one from the maxFreq location and one from a different location). That leaves you with `maxFreq - rest` products that can’t be paired and must be shipped alone.

So now, the number of operations would be:
- `rest` paired operations (each handles 2 products, so `rest * 2` products are shipped this way).
- `maxFreq - rest` single operations for the remaining unpaired products.

If `maxFreq <= rest`, then it's possible to pair **every** product in the inventory with another from a different location. In this case, we can just pair up the entire inventory as much as possible. Since each operation handles two different-location products, the total number of operations becomes simply `ceil(n / 2)`.

In the case where the frequency of one location is **greater than** the rest of the products, then the number of operations is: `rest + (maxFreq - rest)` = `maxFreq`.

This observation leads to an elegant realization: the minimum number of operations required is the **maximum between** `maxFreq` and `ceil(n / 2)`. This ensures:
- You always do at least `ceil(n / 2)` operations, since that's the fewest possible when pairing optimally.
- If there’s a location dominating the inventory (i.e., many of its items cannot be paired), then you'll need at least `maxFreq` operations to handle them.

This approach effectively avoids needing to simulate the entire pairing process. Instead, it uses frequency counting and logical reasoning to arrive at the answer with high efficiency.

Let’s walk through the provided example:

Given: `locations = [1, 8, 6, 7, 7]`

- Frequency count:
- 1: 1
- 6: 1
- 7: 2
- 8: 1

- `maxFreq = 2` (for location 7)
- `n = 5`
- `ceil(n / 2) = ceil(5 / 2) = 3`

So, minimum operations = max(`2`, `3`) = `3`.

That’s the final answer.

To summarize, the logical steps are:
1. Count how many products exist for each location.
2. Find the location with the maximum frequency.
3. Compute `ceil(n / 2)`.
4. Return the maximum of `maxFreq` and `ceil(n / 2)`.

This approach is efficient and handles all edge cases, including when all products are from the same location (must ship one-by-one), and when all products are from unique locations (can pair perfectly).
```


Related Questions