zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    hdu 2222 Keywords Search
    Meet and Greet
    hdu 4673
    hdu 4768
    hdu 4747 Mex
    uva 1513 Movie collection
    uva 12299 RMQ with Shifts
    uva 11732 strcmp() Anyone?
    uva 1401
    hdu 1251 统计难题
  • 原文地址:https://www.cnblogs.com/seyjs/p/13547398.html
Copyright © 2011-2022 走看看