饿了么前端秋招笔试
一个数各个数位的 GCD 刚好也能被这个数本身整除,这种数字被定义为“好数字”,求给定的数组里有多少个“好数字”?没什么难度
🔍 展开代码
jsconst rl = require("readline").createInterface({ input: process.stdin }); const inputs = []; rl.on("line", (line) => inputs.push(line)); rl.on("close", () => { const queryTimes = +inputs[0]; for (let i = 1; i < inputs.length; i += 2) { const n = +inputs[i]; const nums = inputs[i + 1].split(" ").map(Number); const result = findGood(n, nums); console.log(result); } }); function findGood(n, nums) { let answer = 0; for (let i = 0; i < n; i++) { const curNum = nums[i]; if (curNum < 10) { answer++; continue; } // 不是个位数的情况 const numArr = Array.from("" + curNum).map(Number); const gcd = generateGCD(numArr); if (curNum % gcd === 0) answer++; } return answer; } function generateGCD(numArr) { let res = 1; for (let i = 2; i < 10; i++) { res = numArr.every((n) => n % i === 0) ? i : res; } return res; }长度为 n 的字符串 str 任意修改 k 个位置以后最长的相同字母连续子串。没想到滑动窗口
🔍 展开代码
jsconst rl = require("readline").createInterface({ input: process.stdin }); const inputs = []; rl.on("line", (line) => inputs.push(line)); rl.on("close", () => { const [n, k] = inputs[0].split(" ").map(Number); const str = inputs[1]; console.log(deal(n, k, str)); }); function deal(n, k, str) { // 长度为 n 的字符串 str 任意修改 k 个位置以后最长的相同字母连续子串 let maxLength = 0; // 对每个可能的字符(a-z)都尝试一次 for (let targetChar = 0; targetChar < 26; targetChar++) { const char = String.fromCharCode(97 + targetChar); // 'a' + targetChar let left = 0, right = 0; let changesNeeded = 0; // 滑动窗口 while (right < n) { // 扩展右边界 if (str[right] !== char) { changesNeeded++; } // 收缩左边界,直到修改次数不超过k while (changesNeeded > k) { if (str[left] !== char) { changesNeeded--; } left++; } // 更新最大长度 maxLength = Math.max(maxLength, right - left + 1); right++; } } return maxLength; } // 测试 console.log(deal(4, 2, "abcd")); // 3 console.log(deal(5, 2, "abacc")); // 4 console.log(deal(8, 1, "aaaacaaa")); // 8给定一个数组 nums,nums 有多少个子序列在 Fibonacci 序列中。Claude 懵逼了
🔍 展开代码
jsconst rl = require("readline").createInterface({ input: process.stdin }); const inputs = []; rl.on("line", (line) => inputs.push(line)); rl.on("close", () => { for (let i = 1; i < inputs.length; i += 2) { const n = +inputs[i]; const nums = inputs[i + 1].split(" ").map(Number); // nums 有多少个子序列在 Fibonacci 序列中 console.log(deal(n, nums)); } }); function deal(n, nums) {} console.log(deal(3, [1, 1, 1])); // 6 [1]*3 [1,1]*2 console.log(deal(4, [1, 1, 2, 3])); // 15 // [1]*2 [2]*1 [3]*1 // [1,1]*1 [1,2]*2 [1,3]*2 [2,3]*1 // [1,1,2]*1 [1,2,3]*2 [1,1,3]*1 // [1,1,2,3]*1
