字節跳動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. 總結
筆試答得非常難受,與字節也就走到這裏了。希望剩下的一個月能找到一個錢多的工作吧。