2024/03/04 每日3题
问题1: 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表,用字母 A 到 Z 表示,以及一个冷却时间 n。每个周期或时间间隔允许完成一项任务。任务可以按任何顺序完成,但有一个限制:两个 相同种类 的任务之间必须有长度为 n 的冷却时间。
返回完成所有任务所需要的 最短时间间隔 。
function leastInterval(tasks, n) { // 统计每种任务出现的次数 const count = new Array(26).fill(0); for (let task of tasks) { count[task.charCodeAt(0) - 'A'.charCodeAt(0)]++; } // 找出出现次数最多的任务的出现次数 const maxCount = Math.max(...count); // 计算至少需要的时间间隔 let leastTime = (maxCount - 1) * (n + 1) + maxCount; // 找出出现次数与最大出现次数相同的任务种类数 let k = 0; for (let c of count) { if (c === maxCount) { k++; } } // 返回最终结果 return Math.max(leastTime, tasks.length); } // 测试 const tasks = ["A", "A", "A", "B", "B", "B"]; const n = 2; console.log(leastInterval(tasks, n)); // 输出: 8
问题2 : 封装 JavaScript源文件的全部内容到一个函数块有什么意义?
这是一个越来越普遍的做法,已被许多流行的 JavaScript库( jQuery、 Node. js等)采用。这种技术创建了一个围绕文件全部内容的闭包。最重要的是,创建了一个私有的命名空间,有助于避免不同 JavaScript模块和库之间的命名冲突。
这种技术的另一个特点是,允许把一个易于引用的(更短的)别名用于全局变
量。例如, jQuery插件中, jQuery允许你使用 jQuery. no Conflict(),来禁止$引用到jQuery命名空间。在完成这项工作之后,利用这种闭包技术,代码仍然可以使用$,如下所示。
(function(s){/* jQuery plugin code referencing s */} )(jQuery)
问题3:精简对象
现给定一个对象或数组 obj,返回一个 精简对象 。精简对象 与原始对象相同,只是将包含 假 值的键移除。该操作适用于对象及其嵌套对象。数组被视为索引作为键的对象。当 Boolean(value) 返回 false 时,值被视为 假 值。
你可以假设 obj 是 JSON.parse 的输出结果。换句话说,它是有效的 JSON。
示例:
输入:obj = [null, 0, false, 1]
输出:[1]
解释:数组中的所有假值已被移除。
function simplifyObject(obj) { if (Array.isArray(obj)) { return obj.map((item) => (item && typeof item === 'object') ? simplifyObject(item) : item).filter(Boolean); } else if (typeof obj === 'object' && obj !== null) { return Object.keys(obj).reduce((acc, key) => { const value = obj[key]; if (value && typeof value === 'object') { const newValue = simplifyObject(value); if (newValue !== undefined) { acc[key] = newValue; } } else if (Boolean(value)) { acc[key] = value; } return acc; }, {}); } else { return obj; } } // 测试 const input = { "a": 0, "b": false, "c": { "d": 1, "e": 0, "f": null, "g": { "h": "hello", "i": undefined, "j": "" } }, "k": [1, false, 0, null, "test", {}] }; const output = simplifyObject(input); console.log(output);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理