1169. Invalid Transactions

Difficulty:
Related Topics:
Similar Questions:

    Problem

    A transaction is possibly invalid if:

    You are given an array of strings transaction where transactions[i] consists of comma-separated values representing the name, time (in minutes), amount, and city of the transaction.

    Return a list of transactions that are possibly invalid. You may return the answer in any order.

      Example 1:

    Input: transactions = ["alice,20,800,mtv","alice,50,100,beijing"]
    Output: ["alice,20,800,mtv","alice,50,100,beijing"]
    Explanation: The first transaction is invalid because the second transaction occurs within a difference of 60 minutes, have the same name and is in a different city. Similarly the second one is invalid too.
    

    Example 2:

    Input: transactions = ["alice,20,800,mtv","alice,50,1200,mtv"]
    Output: ["alice,50,1200,mtv"]
    

    Example 3:

    Input: transactions = ["alice,20,800,mtv","bob,50,1200,mtv"]
    Output: ["bob,50,1200,mtv"]
    

      Constraints:

    Solution (Java)

    class Solution {
        public List<String> invalidTransactions(String[] transactions) {
            Map<String, TreeMap<Integer, Transaction>> map = new HashMap<>();
            List<String> result = new ArrayList<>();
            for (String transaction : transactions) {
                String[] split = transaction.split(",");
                String name = split[0];
                int time = Integer.parseInt(split[1]);
                String city = split[3];
                map.putIfAbsent(name, new TreeMap<>());
                map.get(name).put(time, new Transaction(time, city));
            }
            for (String transaction : transactions) {
                String[] split = transaction.split(",");
                String name = split[0];
                int time = Integer.parseInt(split[1]);
                int amount = Integer.parseInt(split[2]);
                String city = split[3];
                if (amount > 1000) {
                    result.add(transaction);
                    continue;
                }
                for (Map.Entry<Integer, Transaction> entry :
                        map.get(name).subMap(time - 60, time + 60).entrySet()) {
                    if (Math.abs(time - entry.getKey()) <= 60 && !entry.getValue().city.equals(city)) {
                        result.add(transaction);
                        break;
                    }
                }
            }
            return result;
        }
    
        private static class Transaction {
            int amount;
            String city;
    
            public Transaction(int amount, String city) {
                this.amount = amount;
                this.city = city;
            }
        }
    }
    

    Explain:

    nope.

    Complexity: