1903. 部门统计(回顾)

1903. 部门统计

中文English

公司给你提供了所有员工的信息,包括其ID,姓名和所属部门。
以及他们之间的朋友关系,每个关系中由2个ID组成,如 "1, 2" 代表1号员工和2号员工是朋友。
朋友关系不具有传递性,即BC都是A的朋友,但BC不一定是朋友。
请计算每个部门中与其它部门的员工有朋友关系的员工个数。

样例

样例输入:
employees = [
  "1, Bill, Engineer",
  "2, Joe, HR",
  "3, Sally, Engineer",
  "4, Richard, Business",
  "6, Tom, Engineer"
]

friendships = [
  "1, 2",
  "1, 3",
  "3, 4"
]
样例输出:
"Engineer: 2 of 3"
"HR: 1 of 1"
"Business: 1 of 1"

说明

样例中,Engineer1号员工和HR2号员工是朋友关系,3号员工和Business4号员工是朋友关系,所以Engineer2个人和其它部门有朋友关系,输出"Engineer: 2 of 3“。

注意事项

所有的输入中逗号后都跟有一个空格,而且你的程序输出也要和样例格式相同。
返回的列表对顺序没有要求。
员工信息数量 N <= 50 条。
朋友关系的数量 M <= 1000 条。
员工ID都是100以内的数字。
部门数 K <= 20。

输入测试数据 (每行一个参数)如何理解测试数据?
class Solution:
    """
    @param employees: information of the employees
    @param friendships: the friendships of employees
    @return: return the statistics
    """
    '''
    大致思路:
    1.初始化dic_fri = {},dic_num = {}, dic_emp = {}
    2.然后循环employees,根据','进行切割,根据最后一位来进行匹配,对应的职位放到dic_emp里面,num数量+1。而且dic_emp根据需要对应后面的职位
    3.循环friendships,对应dic_fri,在dic_emp里面进行职位的查找,进行+1
    4.最后根据dic_fri以及dic_num进行字符串拼接返回
    '''
    def departmentStatistics(self, employees, friendships):
        dic_fri = {}
        dic_num = {}
        dic_emp = {}
        for emp in employees:
            l_i = emp.split(',')
            if l_i[2].strip() not in dic_num:
                dic_num[l_i[2].strip()] = 1
                ##附带生成dic_fri
                dic_fri[l_i[2].strip()] = 0
            else:
                dic_num[l_i[2].strip()] += 1
            dic_emp[l_i[0].strip()] = l_i[2].strip()
        

        ##循环friendships,注意,如果一个员工和多个部门有朋友关系,也视为一个员工
        l = []
        for fri in friendships:
            l_j = fri.split(',')
            
            if dic_emp[l_j[0].strip()] != dic_emp[l_j[1].strip()]:
                if l_j[0].strip() not in l:
                    dic_fri[dic_emp[l_j[0].strip()]] += 1
                    l.append(l_j[0].strip())
                if l_j[1].strip() not in l:
                    dic_fri[dic_emp[l_j[1].strip()]] += 1
                    l.append(l_j[1].strip())
            
        #进行字符串拼接
        res = []
        for k,v in dic_fri.items():
            s = k + ': ' + str(v) + ' of ' + str(dic_num[k])
            res.append(s)
        return res

 

posted @ 2020-04-25 13:02  风不再来  阅读(270)  评论(0编辑  收藏  举报