testejava

 avatar
unknown
java
2 years ago
1.4 kB
4
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...