FastPrepDeduplicate Logs: Keep First
Problem · Array

Deduplicate Logs: Keep First

Learn this problem
EasyGoogle logoGoogleFULLTIMEONSITE INTERVIEW
See Google hiring insights

Problem statement

You are given log entries in encounter order. The ith entry is the pair (timestamps[i], messages[i]). Two entries are duplicates when their messages are equal.

For each distinct message, keep only its first encountered entry. This means the earliest array position wins, even if a later duplicate has a smaller timestamp.

Sort the retained pairs by timestamp in ascending order. When two retained pairs have the same timestamp, sort them by message in ascending lexicographic order.

Return the sorted pairs as a String[]. Encode each pair as timestamp|message, using the timestamp's ordinary decimal representation.

Function

deduplicateLogsKeepFirst(timestamps: int[], messages: String[]) → String[]

Examples

Example 1

timestamps = [30,10,20,15,20]messages = ["cache miss","user login","cache miss","heartbeat","user login"]return = ["10|user login","15|heartbeat","30|cache miss"]

The first encountered entries for cache miss, user login, and heartbeat have timestamps 30, 10, and 15. The later duplicates are discarded, even though the later cache miss has a smaller timestamp. Sorting the three retained pairs gives the result.

Example 2

timestamps = [5,5,3,4]messages = ["beta","alpha","beta","gamma"]return = ["4|gamma","5|alpha","5|beta"]

The later beta entry is removed. The retained alpha and beta entries both have timestamp 5, so their messages determine their order.

Example 3

timestamps = []messages = []return = []

There are no log entries, so there are no retained pairs.

Constraints

  • timestamps.length == messages.length
  • 0 <= timestamps.length <= 200000
  • -10^9 <= timestamps[i] <= 10^9
  • 1 <= messages[i].length <= 100
  • Each message contains printable ASCII characters other than |.
  • The total length of all messages does not exceed 10^6.

More Google problems

drafts saved locally
public String[] deduplicateLogsKeepFirst(int[] timestamps, String[] messages) {
    // Write your code here.
}
timestamps[30,10,20,15,20]
messages["cache miss","user login","cache miss","heartbeat","user login"]
expected["10|user login", "15|heartbeat", "30|cache miss"]
checking account