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
  • 相关阅读:
    elasticsearch 中的Multi Match Query
    activiti 流程部署的各种方式
    elasticsearch 嵌套对象之嵌套类型
    elasticsearch Java High Level REST 相关操作封装
    elasticsearch 字段数据类型
    ubuntu 安装 docker
    elasticsearch 通过HTTP RESTful API 操作数据
    facenet 人脸识别(二)——创建人脸库搭建人脸识别系统
    POJ 3093 Margaritas(Kind of wine) on the River Walk (背包方案统计)
    墨卡托投影, GPS 坐标转像素, GPS 坐标转距离
  • 原文地址:https://www.cnblogs.com/seyjs/p/13547398.html
Copyright © 2011-2022 走看看