字节跳动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. 总结
笔试答得非常难受,与字节也就走到这里了。希望剩下的一个月能找到一个钱多的工作吧。