Problem Statement: You are helping Amazon's Quality Assurance engineers process bug reports generated from automated testing logs across various devices and services. Each log contains an integer bug code, and a single test session may include duplicate bug codes if the same issue is triggered multiple times.
To effectively prioritise debugging and resolution, the following rules are applied:
The task is to sort the bug codes in order of decreasing importance, using the above rules.
Example: bugs = [8, 4, 6, 5, 4, 8]
Item Code Frequency:
Problem Statement:
A team at Amazon is working to ensure all packages are correctly sorted for delivery. Each package has a label represented by an uppercase English letter. The full list of labels is given as string packages, where the ith character is the label of the i^{th} package.
To optimize the sorting process, the team wants to analyze each prefix of the string packages (from length 1 to n) and determine the maximum number of equal parts it can be divided into.
Each part must satisfy the following condition:
Given a string packages, calculate for each prefix t (from length 1 to n), the maximum number of equal parts into which the prefix can be divided, such that each part has the same number of occurrences of each character.
Example:
n = 4
packages = "ABAB"
In the given example, t represents the prefix string and length represents the length of the prefix string.
Explanation Table:
Problem1 ->
Quality Assurance Bug Sorting Solution
Topics Involved / Prerequisites
Overview
To sort the bugs according to the QA team's specific rules, we need to know exactly how many times each bug appears before we rearrange them. By first counting the frequencies of all bug codes, we can then pass a custom sorting rule to our algorithm: sort primarily by frequency in ascending order, and break any ties by sorting the bug codes themselves in ascending order.
Approach
1. Counting Frequencies
We traverse the array once and use a Hash Map (unordered_map in C++) to keep a running tally of how many times each bug code appears in the logs.
2. Custom Sorting Logic
We use the standard sorting function but provide it with a custom lambda function (comparator). When the sorting algorithm compares two bug codes, a and b, our custom rule dictates:
Time Complexity
Problem2
Package Sorting Optimization Solution
Topics Involved / Prerequisites
String Traversal
Greatest Common Divisor (GCD) Math
Overview
This problem initially sounds like a complex string-partitioning challenge, but there is a brilliant mathematical catch! If you want to divide a collection of characters into K parts such that every part has the exact same character counts, then the total frequency of every character must be perfectly divisible by K. Therefore, the maximum number of parts K is simply the Greatest Common Divisor (GCD) of all the current character frequencies.
Approach
1. Tracking Frequencies on the Fly
Instead of processing each prefix from scratch (which would be too slow), we iterate through the string character by character. We maintain an array of size 26 to continuously track the frequencies of the uppercase letters as our prefix grows.
2. Calculating the GCD
For every new character we add to our prefix, we want to find the maximum possible divisions. We do this by calculating the GCD of all the non-zero frequencies currently in our tracking array. We append this GCD to our results array and move to the next character.