饿了么笔试,算法红包题重构字符串题
第一题红包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#饿了么信息集散地##饿了么#