【深度优先特辑】每日一道算法题--leetcode 690--员工的重要性--C++

题目:

分析:

各个元素之间存在着1父对多子的关系,这显然是一个树的结构,自然想到采用深度优先或者广度优先的方式来做,

笔者采用深度优先的方式,

1)首先要根据传入的参数id找到该元素在vector中的位置,就是找到指向该元素的指针。

Employee* currentemployee=new Employee();
if(employees.size()<=0){
            return 0;
        }
else{
       for(auto i:employees){  
//这里auto i:v    
//v是容器或者流类型,i的数据类型是v中元素的类型,这里i是Employee类型的数据,遍历该容器中的每个元素
                if(i->id==id){
                currentemployee=i;   //找到id一样的元素,将指针保存为currentemployee
                break;//跳出循环
            }
        }
        }

2)采用递归的方式,求每个元素的子树的重要性之和

sumimportance+=currentemployee->importance;
for(auto a:currentemployee->subordinates){
     sumimportance+=getImportance(employees,a);
   }
return sumimportance;

整体代码:

/*
// Employee info
class Employee {
public:
    // It's the unique ID of each node.
    // unique id of this employee
    int id;
    // the importance value of this employee
    int importance;
    // the id of direct subordinates
    vector<int> subordinates;
};
*/
#include <vector>
using std::vector;
class Solution {
public:
    int getImportance(vector<Employee*> employees, int id) {
        int sumimportance=0;
        Employee* currentemployee=new Employee();
        if(employees.size()<=0){
            return 0;
        }
        else{
            for(auto i:employees){  
                if(i->id==id){
                currentemployee=i;
                break;
            }
        }
        }
        sumimportance+=currentemployee->importance;
        for(auto a:currentemployee->subordinates){
            sumimportance+=getImportance(employees,a);
        }
        return sumimportance;  
    }
};

运行结果:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值