8.15 携程笔试 2021校招研发A卷

第一题:

铺砖
现在有充足的长度为a和长度为b的两种规格瓷砖。现在从这些瓷砖中任取k块来铺路,按递增的顺序输出所有可能的铺成道路的长度。
例子
输入a、b、k
1
2
3
输出一个数组
[3,4,5,6]


看到输出的数组是:[3,4,5,6]
而跑出来是: 3 4 5 6
这个输出简直吐血还要转为字符串。
我一开始用数组好像复杂度有点高,后面改成set了,不过偷偷用了sort排序哈哈,不超时就好能AC
function divingBoard(a, b, k) {
        if(k == 0) return '[]';
    var result = new Set();
    for(var i = 0; i <= k; i++){
        var sum = i * a + (k-i) * b;
        result.add(sum)
    }
    var res = [...result].sort();
    return JSON.stringify(res);
 }    

第二题:

题目真多,但我盲猜是B+树路径和最大么?哈哈,
然而往下看它的输入样例。。。给我一棵树不好吗?

在业务系统中,通常会执行多个任务,各个任务之间存在一定的依赖关系,我们称之为任务节点。每一个节点会设计一个最大的超时时间,如果发生超时现象,那么中断该路径的后续操作。

现在需要计算一个流程的最大执行时间。
项目执行从HEAD开始。如果节点执行结束后,没有后续需要执行的任务节点,那么以END作为结束。
*提示:如上图所示,执行TaskC最长需要50ms,TaskD最长需要80ms,如果TaskD执行发生了超时,那么TaskC + TaskD最长需要消耗130ms的时间。此题中,不需要考虑超时的场景。每个节点的最大执行时间等于超时时间,仅需要计算各个路径中的超时时间之和即可。
*注意:需要检查输入的合法性,如果输入不合理,节点定义错误等异常场景,输出结果为-1
*注意:无需进行闭环间测
输入描述
输入和题干中的内容一致
系统从HEAD开始,每一个节点用“|”分割,每一个节点的信息用“`”分割,如果存在多个子节点例如ABC,用“,”分割。
例如:
HEAD`0`A,B,C|A`20`END表示,这是一个开始节点,他执行时间需要0ms,接下来可以同时执行A,B, C三个子任务节点。
A任务节点,最大执行时间需要20ms,没有需要执行的后续节点
输出描述
如图所示,ABC相互之间没有依赖,可以并行执行,但是DE需要等待C执行完成才可以开始执行。最大执行时间应该为:
timeout(C) + timeout(E) = 200ms。
timeout(C) + timeout(D) + timeout(F) = 160ms。
timeout(B) = 100ms
timeout(A) = 20ms
所以最大值为 200ms

样例输入
HEAD`0`A,B,C|A`20`END|B`100`END|C`50`D,E|D`80`F|E`150`END|F`30`END
样例输出
200
搞了输入输出就没时间写了,然后在本地写出一个可以跑的,线上还没来得及测,不知道对不对?大佬们看看
var str = 'HEAD`0`A,B,C|A`20`END|B`100`END|C`50`D,E|D`80`F|E`150`END|F`30`END';

const strArr = str.split('|');
const arr = strArr.map(value=>{
    return value.split('`')
});

let max = arr[0][1];
let sum = 0;
for(var i = 0; i < arr.length; i++){
    if(arr[i][2] == 'END'){
        sum += parseInt(arr[i][1]);
        j = i - 1;
        while(j > 0 && arr[j][2] != 'END'){
            if(strArr[j].indexOf(arr[i][0]) != -1){
                sum += parseInt(arr[j][1]);
            }
            j--;
        }
        if(sum > max) max = sum;
    }
    sum = 0;
}
console.log(max)





#携程##笔试题目#
全部评论
第二题选Java有模板。
点赞 回复 分享
发布于 2020-08-15 20:40
两题都有模板呀😂
点赞 回复 分享
发布于 2020-08-16 09:50
我感觉第二题就是对根节点的每一个子节点做广度优先遍历,每一个子结点有一个和,谁最大就输出最大的。
点赞 回复 分享
发布于 2020-08-16 12:06
楼主,笔试的时候可以用es6吗?我看赛码网上面的注意事项有JavaScript不能用es6,我就不敢用。
点赞 回复 分享
发布于 2020-08-16 14:07
楼主笔试完有收到面试吗
点赞 回复 分享
发布于 2020-08-20 11:28

相关推荐

小红书 后端选手 n*16*1.18+签字费期权
点赞 评论 收藏
分享
评论
1
10
分享
牛客网
牛客企业服务