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 <= 10^5
transactions[i].length == 2
0 <= costi, cashbacki <= 10^9
Solution (Java)
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;
}
}
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).