Untitled

 avatar
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