testejava
unknown
java
3 years ago
1.4 kB
9
Indexable
Map < String, int[] > map = new HashMap < > ();
for (List list: debts) {
String borrower = list.get(0);
String lender = list.get(1);
int amount = Integer.parseInt(list.get(2));
int[] borrowerBal = map.getOrDefault(borrower, new int[] {
0,
0,
0
});
borrowerBal[0] += amount;
map.put(borrower, borrowerBal);
int[] lenderBal = map.getOrDefault(lender, new int[] {
0,
0,
0
});
lenderBal[1] += amount;
map.put(lender, lenderBal);
}
for (Map.Entry < String, int[] > entry: map.entrySet()) {
int[] bal = entry.getValue();
bal[2] = bal[1] - bal[0];
map.put(entry.getKey(), bal);
}
PriorityQueue pq = new PriorityQueue < > ((a, b) - > map.get(a)[2] == map.get(b)[2] ? a.compareTo(b) : map.get(a)[2] - map.get(b)[2]);
for (String key: map.keySet()) {
pq.add(key);
}
List < String > res = new ArrayList < > ();
int min = 0;
while (!pq.isEmpty()) {
String person = pq.poll();
int[] balance = map.get(person);
if (balance[2] >= 0)
return res;
if (min >= balance[2]) {
min = balance[2];
res.add(person);
}
}
if (res.size() >= 1)
return res;
else
res.add("Nobody has a negative balance");
return res;Editor is loading...