##### Welcome to Subscribe On Youtube

Formatted question description: https://leetcode.ca/all/2335.html

# 2335. Minimum Amount of Time to Fill Cups

• Difficulty: Easy.
• Related Topics: Array, Greedy, Heap (Priority Queue).
• Similar Questions: Construct Target Array With Multiple Sums, Maximum Score From Removing Stones, Maximum Running Time of N Computers.

## Problem

You have a water dispenser that can dispense cold, warm, and hot water. Every second, you can either fill up 2 cups with different types of water, or 1 cup of any type of water.

You are given a 0-indexed integer array amount of length 3 where amount, amount, and amount denote the number of cold, warm, and hot water cups you need to fill respectively. Return the **minimum number of seconds needed to fill up all the cups**.

Example 1:

Input: amount = [1,4,2]
Output: 4
Explanation: One way to fill up the cups is:
Second 1: Fill up a cold cup and a warm cup.
Second 2: Fill up a warm cup and a hot cup.
Second 3: Fill up a warm cup and a hot cup.
Second 4: Fill up a warm cup.
It can be proven that 4 is the minimum number of seconds needed.


Example 2:

Input: amount = [5,4,4]
Output: 7
Explanation: One way to fill up the cups is:
Second 1: Fill up a cold cup, and a hot cup.
Second 2: Fill up a cold cup, and a warm cup.
Second 3: Fill up a cold cup, and a warm cup.
Second 4: Fill up a warm cup, and a hot cup.
Second 5: Fill up a cold cup, and a hot cup.
Second 6: Fill up a cold cup, and a warm cup.
Second 7: Fill up a hot cup.


Example 3:

Input: amount = [5,0,0]
Output: 5
Explanation: Every second, we fill up a cold cup.


Constraints:

• amount.length == 3

• 0 <= amount[i] <= 100

## Solution (Java, C++, Python)

• class Solution {
public int fillCups(int[] amount) {
Arrays.sort(amount);
int sum = amount + amount + amount;
return (amount + amount < amount) ? amount : (sum + 1) / 2;
}
}

############

class Solution {
public int fillCups(int[] amount) {
Arrays.sort(amount);
if (amount + amount <= amount) {
return amount;
}
return (amount + amount + amount + 1) / 2;
}
}

• class Solution:
def fillCups(self, amount: List[int]) -> int:
amount.sort()
if amount + amount <= amount:
return amount
return (sum(amount) + 1) // 2

############

# 2335. Minimum Amount of Time to Fill Cups
# https://leetcode.com/problems/minimum-amount-of-time-to-fill-cups/

class Solution:
def fillCups(self, amount: List[int]) -> int:
res = 0
H = [-x for x in amount if x != 0]
heapify(H)

while H:
if len(H) >= 2:
first, second = heappop(H), heappop(H)
first = -first
second = -second

first -= 1
second -= 1
if first > 0:
heappush(H, -first)
if second > 0:
heappush(H, -second)
res += 1
else:
res += -heappop(H)

return res


• class Solution {
public:
int fillCups(vector<int>& amount) {
sort(amount.begin(), amount.end());
if (amount + amount <= amount) {
return amount;
}
return (amount + amount + amount + 1) / 2;
}
};

• func fillCups(amount []int) int {
sort.Ints(amount)
if amount+amount <= amount {
return amount
}
return (amount + amount + amount + 1) / 2
}

• function fillCups(amount: number[]): number {
amount.sort((a, b) => a - b);
let [a, b, c] = amount;
let diff = a + b - c;
if (diff <= 0) return c;
else return Math.floor((diff + 1) / 2) + c;
}


• impl Solution {
pub fn fill_cups(mut amount: Vec<i32>) -> i32 {
amount.sort();
let dif = amount + amount - amount;
if dif <= 0 {
return amount;
}
(dif + 1) / 2 + amount
}
}



Explain:

nope.

Complexity:

• Time complexity : O(n).
• Space complexity : O(n).