Untitled
unknown
plain_text
5 months ago
2.4 kB
2
Indexable
public static int[] solution(int[] balances, String[] requests) { Map<Long, List<Cashback>> cashbacks = new HashMap<>(); for (int i = 0; i < requests.length; i++) { String[] parts = requests[i].split(" "); String action = parts[0]; long timestamp = Long.parseLong(parts[1]); int holderId = Integer.parseInt(parts[2]) - 1; int amount = Integer.parseInt(parts[3]); applyCashbacks(timestamp, cashbacks, balances); if (action.equals("deposit")) { if (holderId < 0 || holderId >= balances.length) { return new int[]{- (i + 1)}; } balances[holderId] += amount; } else if (action.equals("withdraw")) { if (holderId < 0 || holderId >= balances.length) { return new int[]{- (i + 1)}; } if (balances[holderId] < amount) { return new int[]{- (i + 1)}; } balances[holderId] -= amount; int cashbackAmount = amount * 2 / 100; long cashbackTimestamp = timestamp + 86400; cashbacks.computeIfAbsent(cashbackTimestamp, k -> new ArrayList<>()) .add(new Cashback(holderId, cashbackAmount)); } } applyCashbacks(Long.MAX_VALUE, cashbacks, balances); return balances; } private static void applyCashbacks(long currentTimestamp, Map<Long, List<Cashback>> cashbacks, int[] balances) { List<Long> keysToRemove = new ArrayList<>(); for (Map.Entry<Long, List<Cashback>> entry : cashbacks.entrySet()) { if (entry.getKey() <= currentTimestamp) { for (Cashback cashback : entry.getValue()) { balances[cashback.holderId] += cashback.amount; } keysToRemove.add(entry.getKey()); } } for (long key : keysToRemove) { cashbacks.remove(key); } } private static class Cashback { int holderId; int amount; Cashback(int holderId, int amount) { this.holderId = holderId; this.amount = amount; } }
Editor is loading...
Leave a Comment