跳至主要內容

1757. 可回收且低脂的产品


1757. 可回收且低脂的产品

🟢   🔖  数据库  🔗 力扣open in new window LeetCodeopen in new window

题目

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.

题目大意

表:Products

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| product_id  | int     |
| low_fats    | enum    |
| recyclable  | enum    |
+-------------+---------+

product_id 是该表的主键(具有唯一值的列)。

low_fats 是枚举类型,取值为以下两种 ('Y', 'N'),其中 'Y' 表示该产品是低脂产品,'N' 表示不是低脂产品。

recyclable 是枚举类型,取值为以下两种 ('Y', 'N'),其中 'Y' 表示该产品可回收,而 'N' 表示不可回收。

编写解决方案找出既是低脂又是可回收的产品编号。

返回结果 无顺序要求

返回结果格式如下例所示:

示例 1:

输入: Products 表:

+-------------+----------+------------+
| product_id  | low_fats | recyclable |
+-------------+----------+------------+
| 0           | Y        | N          |
| 1           | Y        | Y          |
| 2           | N        | Y          |
| 3           | Y        | Y          |
| 4           | N        | N          |
+-------------+----------+------------+

输出:

+-------------+
| product_id  |
+-------------+
| 1           |
| 3           |
+-------------+

解释: 只有产品 id 为 1 和 3 的产品,既是低脂又是可回收的产品。

解题思路

MySQL

  1. 返回字段
    SELECT 指定要返回的字段:product_idFROM Products指定数据来自Products 表。

  2. 筛选条件

    • low_fats = 'Y':筛选低脂的产品。
    • recyclable = 'Y':筛选可回收的产品。
    • WHERE 子句的两个条件用 AND 连接,表示两个条件要同时满足。

复杂度分析

  • 时间复杂度O(n),假设表中有 n 条记录,查询的时间复杂度为 O(n),因为需要遍历所有记录来评估条件。
  • 空间复杂度:SQL 查询本身不占用额外空间,返回的结果占用的空间与满足条件的记录数成正比。

Pandas

  1. 加载数据:将数据加载到一个 Pandas DataFrame 中;
  2. 筛选条件:使用 Pandas 的布尔索引筛选出同时满足以下条件的记录:
    • products['low_fats'] == 'Y'
    • products['recyclable'] == 'Y'
  3. 选择列:筛选结果中保留需要的字段:product_id

代码

MySQL
SELECT product_id
FROM Products
WHERE low_fats = 'Y' AND recyclable = 'Y'