5414. 收藏清单

  • 难度中等
  • 本题涉及算法交集
  • 思路交集
  • 类似题型:

题目 5414. 收藏清单

给你一个数组 favoriteCompanies ,其中 favoriteCompanies[i] 是第 i 名用户收藏的公司清单 (下标从 0 开始)

请找出不是其他任何人收藏的公司清单的子集的收藏清单,并返回该清单下标。下标需要按升序排列。

示例 1:

输入:favoriteCompanies = [["leetcode","google","facebook"],["google","microsoft"],["google","facebook"],["google"],["amazon"]]
输出:[0,1,4]
解释:
favoriteCompanies[2]=["google","facebook"] 是 favoriteCompanies[0]=["leetcode","google","facebook"] 的子集。
favoriteCompanies[3]=["google"] 是 favoriteCompanies[0]=["leetcode","google","facebook"] 和 favoriteCompanies[1]=["google","microsoft"] 的子集。
其余的收藏清单均不是其他任何人收藏的公司清单的子集,因此,答案为 [0,1,4] 。

示例 2:

输入:favoriteCompanies = [["leetcode","google","facebook"],["leetcode","amazon"],["facebook","google"]]
输出:[0,1]
解释:favoriteCompanies[2]=["facebook","google"] 是 favoriteCompanies[0]=["leetcode","google","facebook"] 的子集,因此,答案为 [0,1] 。

示例 3:

输入:favoriteCompanies = [["leetcode"],["google"],["facebook"],["amazon"]]
输出:[0,1,2,3]

提示:

1 <= favoriteCompanies.length <= 100
1 <= favoriteCompanies[i].length <= 500
1 <= favoriteCompanies[i][j].length <= 20
favoriteCompanies[i] 中的所有字符串 各不相同 。
用户收藏的公司清单也 各不相同 ,也就是说,即便我们按字母顺序排序每个清单, favoriteCompanies[i] != favoriteCompanies[j] 仍然成立。
所有字符串仅包含小写英文字母。

方法一 判断交集

  • 题目理解
    • 题目可以理解为,两个清单是否为包含关系
    • 因此我们的解题思路是:通过计算两个清单的 交集 ,判断两个清单的交集是否为包含关系
  • 算法流程
    1. 列表转化为集合,可计算两个列表的交集 对于实现交集可以参考 Python实现”两个数组的交集”的两种方法
    2. 判断两集合的交集是否为某一集合 x&y == x ,来确定清单
class Solution(object):
    def peopleIndexes(self, favoriteCompanies):
        fav_set = [set(sub))) for sub in favoriteCompanies]
        ans = []
        for i,x in enumerate(fav_set):
            flag = 0
            for j, y in enumerate(fav_set):
                if i ==j:
                    continue
                if x&y == x: # 通过判断交集,来防止数据重复录入
                    flag = 1
                    break
            if flag == 0:
                ans.append(i)

        return ans
  • 如果你觉得本文对你有帮助,请点赞👍支持
  • 如果有疑惑或者表达不到位的额地方 ,请在下面👇评论区指出