Problem
There is a supermarket that is frequented by many customers. The products sold at the supermarket are represented as two parallel integer arrays products
and prices
, where the ith
product has an ID of products[i]
and a price of prices[i]
.
When a customer is paying, their bill is represented as two parallel integer arrays product
and amount
, where the jth
product they purchased has an ID of product[j]
, and amount[j]
is how much of the product they bought.
Their subtotal is calculated as the sum of each amount[j] * (price of the jth product)
.
The supermarket decided to have a sale. Every nth
customer paying for their groceries will be given a percentage discount. The discount amount is given by discount
, where they will be given discount
percent off their subtotal. More formally, if their subtotal is bill
, then they would actually pay bill * ((100 - discount) / 100)
.
Implement the Cashier
class:
Cashier(int n, int discount, int[] products, int[] prices)
Initializes the object withn
, thediscount
, and theproducts
and theirprices
.double getBill(int[] product, int[] amount)
Returns the final total of the bill with the discount applied (if any). Answers within10-5
of the actual value will be accepted.
Examples
Example 1
|
|
Constraints
1 <= n <= 10^4
0 <= discount <= 100
1 <= products.length <= 200
prices.length == products.length
1 <= products[i] <= 200
1 <= prices[i] <= 1000
- The elements in
products
are unique. 1 <= product.length <= products.length
amount.length == product.length
product[j]
exists inproducts
.1 <= amount[j] <= 1000
- The elements of
product
are unique. - At most
1000
calls will be made togetBill
. - Answers within
10-5
of the actual value will be accepted.
Solution
Method 1 – Hash Map for Product Prices & Counter for Discount
Intuition
The key idea is to efficiently look up product prices using a hash map and keep track of the number of customers served. Every nth customer receives a discount, so we increment a counter with each bill and apply the discount when needed.
Approach
- Store product IDs and their prices in a hash map for O(1) lookup.
- Maintain a counter to track the number of customers.
- For each bill:
- Calculate the subtotal by summing up
amount[j] * price of product[j]
. - Increment the customer counter.
- If the counter is divisible by
n
, apply the discount. - Return the final bill amount.
Code
|
|
|
|
|
|
Complexity
- ⏰ Time complexity:
O(k)
pergetBill
call, wherek
is the number of products in the bill. - 🧺 Space complexity:
O(m)
, wherem
is the number of unique products.