Minimize operations to reduce price difference
AmazonSoftware Engineer · Online AssessmentLast updated
This question evaluates algorithm design and array-manipulation skills, focusing on reasoning about constrained transfers of value, invariants, and the minimization of operation counts under a fixed per-operation bound.
You are managing an inventory of products and want to adjust their prices.
There are n products. The price of the i-th product is given by an integer array prices of length n.
You are also given two integers:
k— the maximum absolute amount by which a product's price can be adjusted (increased or decreased) in a single operation.d— the target price difference threshold.
Your goal is to perform a sequence of allowed operations so that the difference between the highest and lowest prices in the inventory becomes strictly less than d, i.e.:
max(prices) - min(prices) < d
Allowed operation
You may perform the following operation any number of times (possibly zero):
- Choose two indices
xandysuch that1 <= x <= y <= n. - Choose an integer
psuch that1 <= p <= k. - Update the prices as:
prices[x] = prices[x] + pprices[y] = prices[y] - p
Notes:
- It is allowed that
x == y, but then the net change is+pand-pon the same element, which cancels out and has no effect (so such an operation is useless in practice). - You may assume all intermediate prices can be any integers (no additional constraints such as non-negativity unless explicitly stated in the actual implementation setting).
Task
Given:
- an integer
n, - an integer array
pricesof lengthn, - integers
kandd,
find the minimum number of operations required so that after performing these operations, the following holds:
max(prices) - min(prices) < d.
If it is impossible (under the given constraints and allowed operation), specify what value your function should return (e.g., -1), or assume inputs are such that it is always possible.
Input assumptions
You may assume, for purposes of algorithm design:
1 <= n <= 10^5.1 <= k, d <= 10^9.-10^9 <= prices[i] <= 10^9.
Output
- Return a single integer: the minimum number of operations needed to achieve
max(prices) - min(prices) < d.
Complexity requirement
Design an algorithm efficient enough for n up to about 10^5.
Solution walkthrough is for members
Get the full walkthrough with reference code and complexity analysis, plus Kitty Coach at 300 messages a day. Hints, the code runner and community answers stay free.