求整数范围循环镜像映射的简洁高效实现算法
循环镜像范围约束算法实现
核心逻辑
该镜像映射的周期为 2 * n,单个周期内的映射可以通过余数判定直接计算,无需分段复杂逻辑:
- 计算完整周期长度
cycle = 2 * n - 将输入整数
i映射到单个周期区间[0, cycle)内,得到余数r - 最终结果可通过无分支公式直接计算:
n - abs(n - r),等价于分支逻辑:若r ≤ n返回r,否则返回2 * n - r
算法优势
- 时间复杂度为常数级O(1),仅需基础算术运算,执行效率极高
- 天然支持正负整数输入,无需额外分支处理负数场景
- 边界值适配完美,完全符合给定的映射规则
代码实现
Python 版本
Python 内置取模运算默认返回非负余数,无需额外处理负数输入:
def mirror(i: int, n: int) -> int: cycle = 2 * n r = i % cycle return n - abs(n - r)
C/Java 版本
针对负数取模会返回负余数的语言,补充余数校正逻辑:
int mirror(int i, int n) { int cycle = 2 * n; int r = i % cycle; // 校正负余数到[0, cycle)区间 r = r < 0 ? r + cycle : r; return n - abs(n - r); }
验证示例(n=5)
| 输入i | 输出j | 计算过程 |
|---|---|---|
| -2 | 2 | cycle=10, r=8 → 5 - abs(5-8) = 2 |
| -1 | 1 | cycle=10, r=9 → 5 - abs(5-9) = 1 |
| 0 | 0 | 5 - 5 = 0 |
| 5 | 5 | 5 - 0 = 5 |
| 6 | 4 | r=6 → 5 - abs(5-6) = 4 |
| 10 | 0 | r=0 → 5 - 5 = 0 |
内容的提问来源于stack exchange,提问作者Jann5s
相关产品推荐
相关产品推荐

