Click here to download the IntelliJ project for this exercise. Alternatively, you can find all exercises on this git repository.
This exercise is already available in your IntelliJ as a project.
What you need to do is described in the comments at the top of the file in src/main/java/.
package graphs;
/**
* Santa’s workshop is buzzing with activity, but there’s trouble in the toy inventory department! The elves in charge
* of managing the stock have lost their counts for the total inventory and the crucial list linking each toy to its
* category.
*
* Santa is determined to have an accurate count of his toys, so he’s asked you to help recreate the inventory based on
* what the elves can provide you.
*
* Here’s what the elves remember:
* 1. The older elves provide you a list of pairs of toys that are in the same category.
* 2. Each warehouse managers provides a list of the toys they have in stock, along with the number of each toy.
*
* Now, Santa has a list of specific toys he wants to check, and for each, you must determine the total number of toys
* in its category. Can you help the elves restore the inventory and answer Santa’s requests?
*
* Input:
* * A list of pairs of strings, where each pair (x, y) indicates that toys x and y belong to the same category.
* * A list of toys in the warehouses
* * A list of the count for each toy in the warehouses
* * A list of toys Santa wants to query.
*
* Output:
* * A list of integers where the i-th value represents the total count of toys in the category of the i-th queried
* toy. If a toy belongs to no category or is not in stock, the count should be 0.
*
* For example:
* * Input: relations = [[piano, flute], [flute, xylophone], [car, helicopter]],
* occurrences_name = [piano, flute, piano, xylophone, car, helicopter],
* occurrences_count = [3, 2, 1, 5, 2, 3],
* requests = [piano, flute, helicopter, teddybear]
* * Output: [11, 11, 5, 0] -> total_count({piano, flute, xylophone}) = 3 + 2 + 1 + 5 = 11;
* total_count({car, helicopter}) = 2 + 3 = 5;
* total_count({teddy bear}) = 0;
*
* Expected Time-Complexity: O(N * log(N)) (N being the number of relations).
*
* Hint:
* * The problem involves grouping objects that are in the same family and summing their counts efficiently.
* A Union-Find data structure allows to identify and merge such groups of object efficiently.
*/
public class ToyInventory {
/**
* Computes for each requested toy the total number of toys stored in the warehouses that belong to the same
* category.
*
* @param relations A list of pairs of strings, where each pair (x, y) indicates that toys x and y belong to the
* same category.
* @param occurrencesName A list of toys in the warehouses
* @param occurrencesCount A list of the count for each toy in the warehouses
* @param requests A list of toys Santa wants to query.
*
* @return A list of integers where the i-th value represents the total count of toys in the category of the i-th
* requested toy. If a toy belongs to no category or is not in stock, the count should be 0.
*/
public static int[] answerRequests(String[][] relations, String[] occurrencesName, int[] occurrencesCount, String[] requests) {
// TODO
return null;
}
}
- Instruction provided at the top of the source file on IntelliJ.
- Debug using small and easy unit tests provided in junit tests, it can also help to clarify the instructions.
INGInious