Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/2412.html
2412. Minimum Money Required Before Transactions
- Difficulty: Hard.
- Related Topics: .
- Similar Questions: .
Problem
You are given a 0-indexed 2D integer array transactions
, where transactions[i] = [costi, cashbacki]
.
The array describes transactions, where each transaction must be completed exactly once in some order. At any given moment, you have a certain amount of money
. In order to complete transaction i
, money >= costi
must hold true. After performing a transaction, money
becomes money - costi + cashbacki
.
Return** the minimum amount of money
required before any transaction so that all of the transactions can be completed regardless of the order of the transactions.**
Example 1:
Input: transactions = [[2,1],[5,0],[4,2]]
Output: 10
Explanation:
Starting with money = 10, the transactions can be performed in any order.
It can be shown that starting with money < 10 will fail to complete all transactions in some order.
Example 2:
Input: transactions = [[3,0],[0,3]]
Output: 3
Explanation:
- If transactions are in the order [[3,0],[0,3]], the minimum money required to complete the transactions is 3.
- If transactions are in the order [[0,3],[3,0]], the minimum money required to complete the transactions is 0.
Thus, starting with money = 3, the transactions can be performed in any order.
Constraints:
-
1 <= transactions.length <= 105
-
transactions[i].length == 2
-
0 <= costi, cashbacki <= 109
Solution (Java, C++, Python)
-
class Solution { public long minimumMoney(int[][] transactions) { Arrays.sort(transactions,(int a[],int b[])->(a[1]-b[1])); long max=0,ans=0,ab=0; for(int a[]:transactions){ if(a[0]>a[1]){ max+=a[0]; ans=Math.max(ans,max); max-=a[1]; } else ab=Math.max(ab,a[0]); } ans=Math.max(ans,max+ab); return ans; } } ############ class Solution { public long minimumMoney(int[][] transactions) { long s = 0; for (var e : transactions) { s += Math.max(0, e[0] - e[1]); } long ans = 0; for (var e : transactions) { if (e[0] > e[1]) { ans = Math.max(ans, s + e[1]); } else { ans = Math.max(ans, s + e[0]); } } return ans; } }
-
class Solution: def minimumMoney(self, transactions: List[List[int]]) -> int: s = sum(max(0, a - b) for a, b in transactions) ans = 0 for a, b in transactions: if a > b: ans = max(ans, s + b) else: ans = max(ans, s + a) return ans ############ # 2412. Minimum Money Required Before Transactions # https://leetcode.com/problems/minimum-money-required-before-transactions class Solution: def minimumMoney(self, A: List[List[int]]) -> int: return sum(max(0, i - j) for i, j in A) + max(map(min, A))
-
class Solution { public: long long minimumMoney(vector<vector<int>>& transactions) { long long s = 0, ans = 0; for (auto& e : transactions) { s += max(0, e[0] - e[1]); } for (auto& e : transactions) { if (e[0] > e[1]) { ans = max(ans, s + e[1]); } else { ans = max(ans, s + e[0]); } } return ans; } };
-
func minimumMoney(transactions [][]int) int64 { s, ans := 0, 0 for _, e := range transactions { s += max(0, e[0]-e[1]) } for _, e := range transactions { if e[0] > e[1] { ans = max(ans, s+e[1]) } else { ans = max(ans, s+e[0]) } } return int64(ans) } func max(a, b int) int { if a > b { return a } return b }
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).