Untitled
unknown
plain_text
a year ago
2.4 kB
4
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