Find Related Products

This question is based on the product recommendation system on the online shopping website. Every time you open a product page on the website you can see a section "People who viewed this also viewed".

Now given a product relationship represented as a graph(adjacent list), find out the largest connected component on this graph.

List<String> findRelatedProducts(List<List<String>> graph)

Notice the graph is transitive.


Example 1:

var arr = [
  ["product1", "product2", "product3"],
  ["product5", "product2"],
  ["product6", "product7"],
  ["product8", "product7"]
Output: ["product1", "product2", "product3", "product5"]

First, we need to process the input and build the graph like this:

Here product1 has two recommendations: "product2", "product3"

product2 has one recommendation: "product5"

Put it together we have the largest recommendation component ["product1", "product2", "product3", "product5"].

Notice ["product6", "product7", "product8"] is also a connected component but smaller than the previous one.

Try it yourself