js 部门安排所有组合    @param departments: dict, key是部门名, value是每个部门对应所有员工ID数组   

今天面试居然碰到了这个问题,百度了一下搜不到啊 只能自己手撸了。。

/**
 * 部门安排所有组合
 * @param departments: dict, key是部门名, value是每个部门对应所有员工ID数组
 *   例 {'frontend': [1, 2], 'backend': [3, 4], 'devops': [5]}
 * @param required_department: dict, 该任务需要参与的部门和需要的人数
 *   例 {'frontend': 2, 'backend': 1}
 * @return 所有可能的员工组合, 例 [[1, 2, 3], [1, 2, 4]]. 按员工ID升序排序
 */
const test=(department_staff_dict,required_staff)=>{
    const getGroup = (data, index = 0, group = []) => {
        let need_apply = new Array();
        need_apply.push(data[index]);
        for (let i = 0; i < group.length; i++) {
            need_apply.push(group[i] + data[index]);
        }
        group.push.apply(group, need_apply);
        if (index + 1 >= data.length) return group;
        else return getGroup(data, index + 1, group);
    }
    const arrayDiff = (array, count) => {
        return getGroup(array.map(m => m + '')).filter(s => s.length === count);
    }
    let obArr = []
    let index = 0;
    for (let required in required_staff) {
        index += required_staff[required];
        obArr = obArr.concat(arrayDiff(department_staff_dict[required], required_staff[required]))
    }
    return  arrayDiff(obArr, index).map(m => m.split('').map(r => parseInt(r)).sort((a,b)=>a-b));
}
console.log(test({'frontend': [1, 2], 'backend': [3, 4], 'devops': [5]},{'frontend': 2, 'backend': 1}))
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值