资讯详情

LeetCode 2413 Smallest Even Multiple 题解:奇偶分类与位运算的 O(1) 解法(codeforces-go 仓库实战指南)

📅 2026/10/10 6:06:49 | 华诺云谱 👁 阅读
LeetCode 2413 Smallest Even Multiple 题解:奇偶分类与位运算的 O(1) 解法(codeforces-go 仓库实战指南)
科学计算【免费下载链接】codeforces-go算法竞赛模板库 by 灵茶山艾府 项目地址https://gitcode.com/GitHub_Trending/co/codeforces-go点击查看免费下载本篇技术指南以 codeforces-go 仓库中 LeetCode 第 311 场周赛第一题题解文档 为主体完整讲解《Smallest Even Multiple最小偶倍数LeetCode 2413》的数学推导、公式解与位运算解并结合仓库内的 Go 实现、测试数据与测试框架源码给出可复制、可验证的完整解法与学习路径。读完本文你将掌握按奇偶分类 公式化简与位运算代替分支两类经典技巧并了解本仓库 LeetCode 题解目录的代码组织与自动化测试方式。题目背景与题意本题来自 LeetCode 第 311 场周赛的第一题Problem A题解文档位于仓库的 leetcode/weekly/311/a/README.md对应题目为 LeetCode 2413给定一个正整数n求最小的能同时被n和2整除的正整数即lcm(n, 2)。它是典型的送分题但恰好涵盖了算法竞赛中两个高频思维点分类讨论case by case根据n的奇偶性分情况化简问题位运算优化把分支判断压缩成一条无分支的位运算表达式。题解文档给出了两种解法并提供了 Python3、Java、C、C、Go、JavaScript、Rust 共 7 种语言的实现本文逐一讲解其原理并给出仓库内的落地证据。数学推导按奇偶分类题解文档的核心结论非常简洁当n为奇数时n本身不包含因子2所以最小的偶倍数必须额外乘一个2答案为2n当n为偶数时n本身就是偶数已同时是n和2的倍数答案为n。因此答案可以统一写成一条公式$$ (n\bmod 2 1) \cdot n $$推导逻辑验证若n为奇数n mod 2 1公式给出(11)·n 2n若n为偶数n mod 2 0公式给出(01)·n n。两种情况与分类结论完全吻合。公式解的 7 语言实现题解文档给出的公式解法实现如下原样继承可直接复制运行class Solution: def smallestEvenMultiple(self, n: int) - int: return (n % 2 1) * nclass Solution { public int smallestEvenMultiple(int n) { return (n % 2 1) * n; } }class Solution { public: int smallestEvenMultiple(int n) { return (n % 2 1) * n; } };int smallestEvenMultiple(int n) { return (n % 2 1) * n; }func smallestEvenMultiple(n int) int { return (n%2 1) * n }var smallestEvenMultiple function(n) { return (n % 2 1) * n; };impl Solution { pub fn smallest_even_multiple(n: i32) - i32 { (n % 2 1) * n } }注意 Go 版本的语法细节n%2 1需要写成n%2 1模运算与加法之间存在空格分隔若写成n%21在 Go 中会被解析为n%(21)得到完全错误的结果——这是 Go 语法中一个经典的易错点在 Go 语言规范里%、*、/属于同一优先级级别 5而、-属于低一级的级别 4两侧都是运算符时按从左到右结合n%21实际是(n%2)1因此书写时必须保证模运算被正确解析。仓库中的 Go 实现见 leetcode/weekly/311/a/a.go。位运算优化无分支的n (n 1)题解文档进一步指出答案也可以看成n为奇数时n左移一位否则不变因此可以用位运算解决n 1取n二进制的最低位奇数时为1偶数时为0n 1等价于2n二进制左移一位末位补零n 0就是n本身。于是n (n 1)一个表达式即可完成全部逻辑奇数时左移一位得2n偶数时不移动得n。这一写法用位运算消除了分支判断是用位运算做分类讨论的代表性技巧也契合题解中位运算基础/性质/拆位/试填/恒等式/思维这一题单分类的主题。各语言位运算实现如下class Solution: def smallestEvenMultiple(self, n: int) - int: return n (n 1)class Solution { public int smallestEvenMultiple(int n) { return n (n 1); } }class Solution { public: int smallestEvenMultiple(int n) { return n (n 1); } };int smallestEvenMultiple(int n) { return n (n 1); }func smallestEvenMultiple(n int) int { return n (n 1) }var smallestEvenMultiple function(n) { return n (n 1); };impl Solution { pub fn smallest_even_multiple(n: i32) - i32 { n (n 1) } }复杂度分析题解文档给出的复杂度结论时间复杂度$\mathcal{O}(1)$无循环常量次运算空间复杂度$\mathcal{O}(1)$仅使用常量级额外空间。公式解与位运算解在复杂度上完全一致区别仅在于实现风格前者直白易懂、后者更贴合位运算高手的审美并可在某些场景下避免分支预测的开销。仓库实战Go 实现、测试数据与测试框架作为算法竞赛模板仓库 codeforces-go 的一部分这道题不仅记录了题解还配套了可直接运行的 Go 代码与自动化测试形成题解 实现 用例 测试驱动的完整闭环。这与 leetcode/weekly/311/a/README.md 中给出的 Go 解法一一对应。1. 实现文件仓库采用位运算版作为最终提交实现见 leetcode/weekly/311/a/a.gopackage main // https://space.bilibili.com/206214 func smallestEvenMultiple(n int) int { return n (n 1) }2. 测试文件与数据leetcode/weekly/311/a/a_test.go 通过testutil.RunLeetCodeFuncWithFile从 leetcode/weekly/311/a/a.txt 读取测试数据并驱动验证func Test_a(t *testing.T) { targetCaseNum : 0 // -1 if err : testutil.RunLeetCodeFuncWithFile(t, smallestEvenMultiple, a.txt, targetCaseNum); err ! nil { t.Fatal(err) } }leetcode/weekly/311/a/a.txt 中按每输入参数个数 输出个数行一组存放用例本题为1 输入 1 输出即两行一组5 10 6 6即两个测试用例smallestEvenMultiple(5) 10奇数翻倍与smallestEvenMultiple(6) 6偶数不变与题解的奇偶分类结论完全一致。3. 测试框架原理测试驱动核心位于 leetcode/testutil/leetcode.goRunLeetCodeFuncWithFile读取用例文件按fNumIn fNumOut行切分成用例组逐组调用函数并比对输出RunLeetCodeFuncWithExamples使用反射reflect将文本参数解析为函数入参、将实际返回值序列化为字符串与期望输出比对并支持指定单条用例调试targetCaseNum为负数时表示倒数第几个用例如-1表示最后一个用例以及超时检测isTLE配合DebugTLE。也就是说在仓库目录下运行go test ./leetcode/weekly/311/a/即可自动验证位运算解法在样例数据上的正确性这也反向验证了题解文档结论的可复现性。延伸学习从一题到一类位运算技巧本题的n 1、n k只是位运算的入门用法。本仓库在 copypasta/bits.go 中对位运算做了系统化整理包括运算符优先级速查% * / ^高于 - | ^这正是上文中 Go 写法易错点的根源仓库注释中直接给出了 Go 规范中的优先级表math/bits标准库常用函数说明如bits.Len(x)与 $\log_2$ 的换算关系floor(log2(x)) bits.Len(x) - 1、bits.Len(0) 0的边界坑按主题整理的题单与链接与或AND/OR的区间单调性、异或XOR的性质、按位试填、恒等式、构造等进阶技巧及其对应练习题目可作为从一题走向一类的进阶路径。小结LeetCode 2413 虽然是一道简单题却完整展示了三个值得沉淀的思维模板奇偶分类 公式化简(n mod 2 1) · n把两种情况统一进一条公式避免手写if/else位运算代替分支n (n 1)用移位与最低位提取一次性完成逻辑是位运算题单copypasta/bits.go的经典入门案例题解驱动的仓库工程实践在 codeforces-go 中每题都有README.md题解.go实现.txt用例_test.go测试四件套可通过 leetcode/testutil/leetcode.go 的RunLeetCodeFuncWithFile一键验证这一模式同样适用于周赛其余题目如本场 b/c/d 题见 leetcode/weekly/311/ 目录。参考仓库路径汇总题解文档leetcode/weekly/311/a/README.mdGo 实现leetcode/weekly/311/a/a.go测试驱动leetcode/weekly/311/a/a_test.go测试数据leetcode/weekly/311/a/a.txt测试框架leetcode/testutil/leetcode.go位运算专题copypasta/bits.go赞分享科学计算【免费下载链接】codeforces-go算法竞赛模板库 by 灵茶山艾府 项目地址https://gitcode.com/GitHub_Trending/co/codeforces-go点击查看免费下载相关推荐交替比特位判定 O(1) 位运算解法解析 codeforces-go 中的 LeetCode 693 题解交替比特位判定 O 1 位运算解法解析 codeforces go 中的 LeetCode 693 题解 本文围绕 LeetCode 693「交替位二进制数」科学计算codeforces-go 仓库题解精读LeetCode 1920「基于排列构建数组」的 O(1) 空间位运算标记法codeforces go 仓库题解精读LeetCode 1920「基于排列构建数组」的 O 1 空间位运算标记法 导读 本文精读 LeetCode 1920科学计算LeetCode 2680「最大或值」双解法拆解前后缀分解与 O(1) 空间位运算优化codeforces-go 实战指南LeetCode 2680「最大或值」双解法拆解前后缀分解与 O 1 空间位运算优化codeforces go 实战指南 导读 本文以 codeforce科学计算上一篇用 EJBCA Community CA 在 Fleet 中做端到端 SCEP 集成测试完整实战指南下一篇AG-UI 集成 LlamaIndex用 TypeScript 客户端将 RAG 工作流接入前端应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑