字节跳动2020秋招8月11笔试记录
1. 第一题关于闹钟的(80%)
// 1. 可能有多个闹钟可以及时到达教室 // 2. 要在所有闹钟中找一个最优解 // 时间描述成绝对时间: A * 60 + B 分钟 function getTime(arr) { return arr[0] * 60 + arr[1]; } // 输入部分 var N = parseInt(readline()); // 闹钟数目 var rawClocks = []; // 原始时间数据 var clocks = []; // 所有闹钟时间 for (let i = 0; i < N; i++) { rawClocks.push(readline().split(" ").map(function (d) { return parseInt(d); })); } clocks = rawClocks.map(getTime); var cost = parseInt(readline()); // 需要时间 // 死亡线 var deadLine = getTime(readline().split(" ").map(function (d) { return parseInt(d); })); // 逻辑部分 // 先遍历,找到所有可以满足条件的闹钟 var bestDiff; // 最优解差值 var curDiff; // 当前差值 var index; // 最优解索引 for(let i = 0; i < N; i++){ curDiff = deadLine - clocks[i]; if(curDiff >=cost){ // OK, 在其中找到最优解,使用差值记录最优解,一旦差值更小就更新 if(bestDiff !== undefined){ if(curDiff < bestDiff){ // 更新 index = i; bestDiff = curDiff; } // 抛弃已知的非最优解 }else{ // 初始化 index = i; bestDiff = curDiff; } } } // 输出部分 var answer = rawClocks[index][0] + " " + rawClocks[index][1]; print(answer);
2. 第二题是字符串加解密(0%)
3. 第三题是按年龄发工资的题(0%)
// 贪心算法的意思 // 每次找最小年龄的员工为其发钱,并观察左右的钱数,不得少于左右 // 所以首先要有查找最小值的算法 // 然后记录最小值索引 var N = readline(); // 员工数 var rawYear = readline().split(" ").map(function (d) { return parseInt(d); }); // 座位年限 var salary = rawYear.map(function () { return 0 }); // 工资 var hasSalary = []; var min = 0; // 年龄最小索引 for (let i = 0; i < N; i++) { // 初始化min, 没发工资的人里的第一个 min = 0; while (hasSalary.includes(min)) { min++; } // 找年龄最小值 for (let j = min; j < N; j++) { if (!hasSalary.includes(j) && rawYear[j] < rawYear[min]) { min = j; } } hasSalary.push(min); // 开始发工资 // 如果等于上一个最小值的年龄,就直接和上一个发一样的工资 if (hasSalary.length > 1 && rawYear[min] === rawYear[hasSalary.slice(-2)[0]]) { salary[min] = salary[hasSalary.slice(-2)[0]]; } else if (min === 0) { // 找工资极小值+100,就是本人工资 salary[0] = salary[1] + 100; } else if (min === N - 1) { salary[N - 1] = salary[N - 2] + 100; } else { // 左右都有人,找较大者+100 if (salary[min - 1] > salary[min + 1]) { salary[min] = salary[min - 1] + 100; } else { salary[min] = salary[min + 1] + 100; } } } console.log(hasSalary); console.log(salary);
4. 第四题大概是个路径遍历方面的问题吧,不懂(0%)
5. 总结
笔试答得非常难受,与字节也就走到这里了。希望剩下的一个月能找到一个钱多的工作吧。