题目如下:
Given the array
favoriteCompanies
wherefavoriteCompanies[i]
is the list of favorites companies for theith
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