Skip to main content

Recyclable and Low Fat Products - Solution & Explanation

EasyDatabase13 min readAsked at: Amazon, Microsoft, Meta +3
Practice this problem

Problem Statement

Table: Products

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| product_id  | int     |
| low_fats    | enum    |
| recyclable  | enum    |
+-------------+---------+
product_id is the primary key (column with unique values) for this table.
low_fats is an ENUM (category) of type ('Y', 'N') where 'Y' means this product is low fat and 'N' means it is not.
recyclable is an ENUM (category) of types ('Y', 'N') where 'Y' means this product is recyclable and 'N' means it is not.

 

Write a solution to find the ids of products that are both low fat and recyclable.

Return the result table in any order.

The result format is in the following example.

 

Example 1:

Input: 
Products table:
+-------------+----------+------------+
| product_id  | low_fats | recyclable |
+-------------+----------+------------+
| 0           | Y        | N          |
| 1           | Y        | Y          |
| 2           | N        | Y          |
| 3           | Y        | Y          |
| 4           | N        | N          |
+-------------+----------+------------+
Output: 
+-------------+
| product_id  |
+-------------+
| 1           |
| 3           |
+-------------+
Explanation: Only products 1 and 3 are both low fat and recyclable.

Approach Overview

Problem Overview: You are given a Products table containing product_id, low_fats, and recyclable. The task is straightforward: return the IDs of products that are marked as both low fat ('Y') and recyclable ('Y'). This is primarily a filtering problem where you scan records and keep only those matching both conditions.

Approach 1: SQL Filtering Approach (O(n) time, O(1) space)

The most direct solution uses a SQL WHERE clause to filter rows that satisfy both constraints. The query scans the Products table and checks whether low_fats = 'Y' and recyclable = 'Y'. Databases are optimized for this type of filtering, so the engine performs a single pass through the dataset (or uses indexes if available). This approach is ideal when solving the problem directly in SQL or preparing for database-focused interviews involving database queries.

Approach 2: Programmatic Filtering Approach (O(n) time, O(1) space)

If the dataset is represented as objects or rows in application code, iterate through the collection once and check the two attributes for each product. For every entry, evaluate whether both flags equal 'Y'. If the condition holds, append the product_id to the result list. This approach mirrors the SQL filter but is implemented in languages like Python or Java. It relies on a simple linear scan, making it efficient and easy to implement.

Approach 3: Using Hash Maps (O(n) time, O(n) space)

A hash map can store product IDs grouped by their attributes. As you iterate through the dataset, insert entries based on their low_fats and recyclable status. After building the structure, retrieve the IDs that fall into the category where both values are 'Y'. This method is usually unnecessary for this problem but demonstrates how attribute-based grouping can be implemented with constant-time lookups.

Approach 4: Sorting and Counting (O(n log n) time, O(1) extra space)

Another theoretical approach sorts records based on their attribute values so that similar combinations appear together. After sorting, scan the array and collect IDs belonging to the ('Y','Y') group. Sorting introduces an extra O(n log n) cost, so it is less efficient than direct filtering. However, it can be useful when working with datasets that must be ordered for other operations or when applying techniques from sorting algorithms.

Recommended for interviews: The SQL filtering approach is the expected solution for database problems. It demonstrates that you understand how to use conditional filtering in queries and how relational databases process data. The programmatic linear scan is the equivalent approach when solving the problem in a general-purpose language. Brute-force scanning shows basic reasoning, but recognizing that a single-pass filter solves the problem optimally demonstrates practical engineering judgment.

Approach 1: SQL Filtering Approach

In this approach, we use a SQL query to select the desired products directly from the database. We utilize the powerful SELECT statement combined with a WHERE clause to filter the rows that meet our conditions. Specifically, we look for rows where both the low_fats column and the recyclable column are equal to 'Y'. This is a simple yet efficient method to retrieve the data required.

The SQL solution involves a straightforward SELECT statement. We select the product_id from the table Products where the columns low_fats and recyclable both have values 'Y'. Simply, we filter our table to get only those entries that meet both conditions.

Code

SQL

Complexity

The time complexity of this SQL query is O(n), where n is the number of rows in the table, because it needs to scan through each row to check the conditions. The space complexity is O(1), assuming the result set fits into memory.

Try this approach in the editor →

Approach 2: Programmatic Filtering Approach

Another approach is to simulate the operation in a procedural programming language. We would read a list of products representing rows from the table and filter this list programmatically. For each product, we check the conditions of being low fat and recyclable. This approach is helpful in scenarios where you deal with data outside databases or wish to manipulate and filter datasets directly in your code.

In the Python approach, we define a list of dictionaries where each dictionary represents a product. We then use a list comprehension to filter products that have both low_fats and recyclable set to 'Y'. We iterate over the list, apply our conditions, and collect the product IDs that fulfill them.

Code

Python

Complexity

Time complexity is O(n), where n is the number of products, as it involves scanning through each product. The space complexity is also O(n), since we store a portion of the original list in memory when we filter it.

Try this approach in the editor →

Approach 3: Approach 1: Using Hash Maps

This approach involves utilizing hash maps (or dictionaries) to store and retrieve data efficiently. By storing elements in key-value pairs, we can quickly check for existing values and update as needed. This is particularly useful for problems involving frequency counts or checking for duplicates.

This C program uses a simple hash table to count the frequency of each element in a given set of keys. The hash function modulates the key by the table size to find an index. We then increment the count at the hashtable index corresponding to each key.

Code

C

C++

Java

Python

C#

JavaScript

Complexity

Time Complexity: O(n), as we traverse the input data once.
Space Complexity: O(1) to O(n), as the space used by the hash table can be considered constant in terms of input size if limited by TABLE_SIZE.

Try this approach in the editor →

Approach 4: Approach 2: Sorting and Counting

This approach sorts the input data first, then counts consecutive elements to determine frequency. While less optimal for large data sets than hash maps, it can be straightforward and relies on well-understood sorting algorithms.

This C program sorts the array using qsort and then counts frequencies of sorted elements. It prints the element and its count whenever a new number is encountered in the sorted list.

Code

C

C++

Java

Python

C#

JavaScript

Complexity

Time Complexity: O(n log n) due to sorting.
Space Complexity: O(1) if in-place sorting is used, otherwise O(n) if additional space is required for sorting.

Try this approach in the editor →

Approach 5: Conditional Filtering

We can directly filter the product IDs where low_fats is Y and recyclable is Y.

Code

Python

MySQL

Try this approach in the editor →

Complexity Comparison

ApproachComplexity
SQL Filtering Approach

The time complexity of this SQL query is O(n), where n is the number of rows in the table, because it needs to scan through each row to check the conditions. The space complexity is O(1), assuming the result set fits into memory.

Programmatic Filtering Approach

Time complexity is O(n), where n is the number of products, as it involves scanning through each product. The space complexity is also O(n), since we store a portion of the original list in memory when we filter it.

Approach 1: Using Hash Maps

Time Complexity: O(n), as we traverse the input data once.
Space Complexity: O(1) to O(n), as the space used by the hash table can be considered constant in terms of input size if limited by TABLE_SIZE.

Approach 2: Sorting and Counting

Time Complexity: O(n log n) due to sorting.
Space Complexity: O(1) if in-place sorting is used, otherwise O(n) if additional space is required for sorting.

Conditional Filtering—

Detailed Complexity Analysis

ApproachTimeSpaceWhen to Use
SQL Filtering ApproachO(n)O(1)Best for database queries where filtering rows with conditions is required
Programmatic FilteringO(n)O(1)When processing product records in application code
Hash Map GroupingO(n)O(n)Useful when grouping products by attributes for multiple lookups
Sorting and CountingO(n log n)O(1)When records must be ordered before processing

Video Solution

Recyclable and Low Fat Products | Leetcode 1757 | Crack SQL Interviews in 50 Qs #mysql #leetcode • Learn With Chirag • 62,523 views views

Watch 9 more video solutions →

Frequently Asked Questions

Is Recyclable and Low Fat Products easy or hard?
Recyclable and Low Fat Products is classified as an Easy problem on LeetCode with a high acceptance rate. It mainly tests basic SQL filtering or simple conditional iteration in code rather than complex algorithms.
Recyclable and Low Fat Products Python/Java solution
In Python or Java, store the records in a list or array and iterate through them once. For each entry, check whether both attributes are 'Y'. If true, append the product_id to the output list. This maintains O(n) time and constant extra space.
How to solve Recyclable and Low Fat Products in O(n)?
Perform a single pass through the dataset and check two conditions for every record: low_fats == 'Y' and recyclable == 'Y'. In SQL, this is implemented using a WHERE clause. In programming languages, iterate through the list and collect product IDs that satisfy both conditions.
What is the best approach for Recyclable and Low Fat Products?
The SQL filtering approach is the most efficient and expected solution. A simple query with a WHERE clause checks whether low_fats = 'Y' and recyclable = 'Y'. This scans the table once, giving O(n) time complexity with constant extra space.
Is Recyclable and Low Fat Products asked at Google/Amazon/Meta?
Problems of this type commonly appear in interviews focused on SQL fundamentals and database querying. Companies such as Amazon, Google, and Meta frequently test candidates on filtering, aggregation, and relational query logic using simple table schemas.
What data structure is used in Recyclable and Low Fat Products?
The core solution does not require advanced data structures. It relies on scanning rows in a database table or iterating through a list of records. Optional implementations may use arrays or hash maps when processing the data programmatically.
What is the time complexity of Recyclable and Low Fat Products?
The optimal solution runs in O(n) time because each row in the Products table is evaluated once. The space complexity is O(1) since only a small result set of product IDs is stored without additional data structures.

Ready to solve this problem?

Practice Recyclable and Low Fat Products with our built-in code editor and test cases.

Practice on FleetCode