Similar Problems

Similar Problems not available

Alert Using Same Key Card Three Or More Times In A One Hour Period - Leetcode Solution

Companies:

LeetCode:  Alert Using Same Key Card Three Or More Times In A One Hour Period Leetcode Solution

Difficulty: Medium

Topics: string hash-table sorting array  

Problem:

Design a system that triggers an alert if the same key card is used three or more times in a one-hour period. The system should reset its usage count after the one-hour period ends.

Solution:

This problem can be solved using a HashMap that tracks the usage count of each key card. We will iterate over the logs one by one, maintaining a sliding window of log entries for the past one hour. If the usage count of a key card exceeds three, we will trigger an alert. We will also remove any log entries that are more than one hour old from the sliding window.

We can make the implementation more efficient by using a PriorityQueue to maintain a sorted list of log entries. We will insert each log entry into the PriorityQueue, and when we need to remove old entries, we will simply pop entries from the front until we find an entry that is less than one hour old.

Here is the Java code that implements the solution:

class AlertSystem { private HashMap<String, PriorityQueue<Integer>> cardUsage;

public AlertSystem() {
    cardUsage = new HashMap<>();
}

public void logEntry(String cardId, int time) {
    // Get the usage count for this cardId
    PriorityQueue<Integer> usageCount = cardUsage.getOrDefault(cardId, new PriorityQueue<>());

    // Remove any old log entries from the usage count
    while (!usageCount.isEmpty() && usageCount.peek() < time - 3600) {
        usageCount.poll();
    }

    // Add the new log entry to the usage count
    usageCount.offer(time);

    // Update the card usage map
    cardUsage.put(cardId, usageCount);

    // Check if the alert should be triggered
    if (usageCount.size() >= 3) {
        System.out.println("ALERT: Card " + cardId + " used " + usageCount.size() + " times in the last hour!");
    }
}

}

We can test our solution using the following code:

public static void main(String[] args) { AlertSystem alertSystem = new AlertSystem();

// Log some entries for card "A"
alertSystem.logEntry("A", 100);
alertSystem.logEntry("A", 200);
alertSystem.logEntry("A", 300);
alertSystem.logEntry("A", 400);
alertSystem.logEntry("A", 500);
alertSystem.logEntry("A", 600);

// Log some entries for card "B"
alertSystem.logEntry("B", 150);
alertSystem.logEntry("B", 250);
alertSystem.logEntry("B", 350);

// Log some entries for card "A" again (should trigger an alert)
alertSystem.logEntry("A", 700);
alertSystem.logEntry("A", 800);
alertSystem.logEntry("A", 900);

// Log some more entries for card "B" (should not trigger an alert)
alertSystem.logEntry("B", 450);
alertSystem.logEntry("B", 550);
alertSystem.logEntry("B", 650);

}

This should output:

ALERT: Card A used 3 times in the last hour!

This satisfies the requirements of the problem.

Alert Using Same Key Card Three Or More Times In A One Hour Period Solution Code

1