【leetcode】1452. People Whose List of Favorite Companies Is Not a Subset of Another List

题目如下:

Given the array favoriteCompanies where favoriteCompanies[i] is the list of favorites companies for the ith person (indexed from 0).

Return the indices of people whose list of favorite companies is not a subset of any other list of favorites companies. You must return the indices in increasing order.

Example 1:

Input: favoriteCompanies = [["leetcode","google","facebook"],["google","microsoft"],["google","facebook"],["google"],["amazon"]]
Output: [0,1,4] 
Explanation: 
Person with index=2 has favoriteCompanies[2]=["google","facebook"] which is a subset of favoriteCompanies[0]=["leetcode","google","facebook"] corresponding to the person with index 0. 
Person with index=3 has favoriteCompanies[3]=["google"] which is a subset of favoriteCompanies[0]=["leetcode","google","facebook"] and favoriteCompanies[1]=["google","microsoft"]. 
Other lists of favorite companies are not a subset of another list, therefore, the answer is [0,1,4].

Example 2:

Input: favoriteCompanies = [["leetcode","google","facebook"],["leetcode","amazon"],["facebook","google"]]
Output: [0,1] 
Explanation: In this case favoriteCompanies[2]=["facebook","google"] is 
a subset of favoriteCompanies[0]=["leetcode","google","facebook"], therefore, the answer is [0,1].

Example 3:

Input: favoriteCompanies = [["leetcode"],["google"],["facebook"],["amazon"]]
Output: [0,1,2,3]

Constraints:

  • 1 <= favoriteCompanies.length <= 100
  • 1 <= favoriteCompanies[i].length <= 500
  • 1 <= favoriteCompanies[i][j].length <= 20
  • All strings in favoriteCompanies[i] are distinct.
  • All lists of favorite companies are distinct, that is, If we sort alphabetically each list then favoriteCompanies[i] != favoriteCompanies[j].
  • All strings consist of lowercase English letters only.

解题思路:本题是判断一个数组是否是另一个数组的子集。我们可以给每门公司一个唯一索引值,这样的话每个数组就可以算出一个特征值,计算方法是累加数组中每个公司的的特征值,公司的特征值等于2的索引值次方。最后,判断数组子集,只需要用两个数组的特征值做或操作,如果结果等于其中一个数组的特征值,那就表示一个数组是另一个数组的子集。

代码如下:

class Solution(object):
    def peopleIndexes(self, favoriteCompanies):
        """
        :type favoriteCompanies: List[List[str]]
        :rtype: List[int]
        """
        dic_companies = {}
        inx = 0
        for companies in favoriteCompanies:
            for company in companies:
                if company not in dic_companies:
                    dic_companies[company] = inx
                    inx += 1

        favorite_comp = []
        for companies in favoriteCompanies:
            val = 0
            for company in companies:
                val += 2** dic_companies[company]
            favorite_comp.append(val)

        res = []

        for i in range(len(favorite_comp)):
            flag = True
            for j in range(len(favorite_comp)):
                if i == j:continue
                if favorite_comp[i] | favorite_comp[j] == favorite_comp[j]:
                    flag = False
                    break
            if flag:
                res.append(i)

        return res
原文地址:https://www.cnblogs.com/seyjs/p/13547398.html