饿了么笔试,算法红包题重构字符串题
第一题红包A 100%
function leastCost(nums, arr) {
let dp = new Array(nums).fill(0);
dp[0] = arr[0] / 2;
dp[1] = Math.min(dp[0] + arr[1] - 5, arr[0] - 5 + arr[1] / 2);
for (let i = 2; i < nums; i++) {
dp[i] = Math.min(
dp[i - 2] + arr[i - 1] - 5 + arr[i] / 2,
dp[i - 1] + arr[i] - 5
);
}
console.log(dp[nums - 1]);
}
// leastCost(4, [178, 15, 25, 178]);
// 208
直接dp,递推式:当天的最小代价取决于 前两天/2+前天-5+今天/2 和 前天/2+今天-5 的 最小值
第二题 字符串重构 A 90%
function restructString(str) {
let newStr = str.split("");
let mySet = new Set(newStr);
let letter = [...mySet];
let t = "";
newStr.forEach((el) => {
t += letter[(letter.indexOf(el) + 1) % letter.length];
});
console.log(t);
}
// restructString("aabbc");
// bbcca
#饿了么信息集散地##饿了么#
查看14道真题和解析
