滴滴秋招笔试
给定一份路线字符串,最少修改几个字符能保证回到起点?通过
🔍 展开代码
jsconst rl = require("readline").createInterface({ input: process.stdin, }); const inputs = []; rl.on("line", (line) => { inputs.push(line); }); rl.on("close", () => { const str = inputs[0]; let hori = 0; let vert = 0; for (const s of str) { if (s === "L") hori++; else if (s === "R") hori--; else if (s === "U") vert++; else vert--; } hori = Math.abs(hori); vert = Math.abs(vert); res = Math.floor(hori / 2) + Math.floor(vert / 2) + (hori % 2 === 1 ? 1 : 0); console.log(res); });
给定 n 个居民,m 套房源,V 份补贴。怎么样分配房源能保证无房居民的数量最少?整体思路没问题,笔试有点小瑕疵没过
🔍 展开代码
jsconst rl = require("readline").createInterface({ input: process.stdin, }); const inputs = []; rl.on("line", (line) => inputs.push(line)); rl.on("close", () => { const [n, m, v] = inputs[0].split(" ").map(Number); const pressures = inputs[1].split(" ").map(Number); const prices = inputs[2].split(" ").map(Number); const result = deal(n, m, v, pressures, prices); console.log(result); }); function deal(n, m, v, pressures, prices) { pressures.sort((a, b) => a - b); // 房子价格 -> 数量 const map = new Map(); for (const p of prices) { map.set(p, (map.get(p) || 0) + 1); } // 从剩余房源中分配 const distribute = (pressure) => { const smaller = [...map.keys()].filter((p) => p <= pressure); if (smaller.length) { return Math.max(...smaller); // 选最大的不超过 pressure } // 否则选剩余的最小价格 let minPrice = Infinity; for (const [p, cnt] of map) { if (cnt > 0) minPrice = Math.min(minPrice, p); } return minPrice; }; let res = n; for (const cur of pressures) { if (map.size === 0) break; // 没房子了 const house = distribute(cur); if (!Number.isFinite(house)) break; // 无可用房 if (house <= cur) { map.set(house, map.get(house) - 1); if (map.get(house) === 0) map.delete(house); res--; } else { const diff = house - cur; if (v >= diff) { v -= diff; map.set(house, map.get(house) - 1); if (map.get(house) === 0) map.delete(house); res--; } } } return res; }