
本文介绍一种时间复杂度为 o(k) 的算法,用于判断给定整数子集(取自 1 到 n 的循环序列)是否按顺序严格连续(支持跨边界如 [35,36,1]),并排除重复、逆序或跳跃情况。
本文介绍一种时间复杂度为 o(k) 的算法,用于判断给定整数子集(取自 1 到 n 的循环序列)是否按顺序严格连续(支持跨边界如 [35,36,1]),并排除重复、逆序或跳跃情况。
在处理环形编号系统(如钟表刻度、模运算索引、游戏棋盘坐标等)时,常需验证一组数字是否构成“循环连续序列”——即每个元素恰好是前一个元素的后继,且当到达最大值 n 后,下一个合法值为 1。关键约束包括:唯一性、顺序性、严格递增(含循环跳转)、无间隔。
以下是一个简洁、高效且可复用的实现方案:
class ConsecutiveChecker:
def __init__(self, n):
"""
初始化循环连续性检查器。
:param n: 循环范围上限(即数字取值范围为 1..n)
"""
self.n = n
def __call__(self, seq):
"""
检查序列是否为循环连续序列。
:param seq: 非空整数列表,元素应属于 [1, n]
:return: bool,True 表示严格循环连续,否则 False
"""
if not seq:
return False
# 验证所有元素在有效范围内
if not all(1 <p><strong>核心逻辑说明:</strong> </p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/ai/2884" title="Codex Bridge"><img
src="https://img.php.cn/upload/ai_manual/001/246/273/177985602586937.png" alt="Codex Bridge" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/ai/2884" title="Codex Bridge" class="overflowclass">Codex Bridge</a>
<p class="overflowclass">一款AI工具,主要用于将编码任务调度到本地 OpenAI Codex CLI,支持后台执行、状态轮询以及可交互式回答的澄清问题。适用于 OpenClaw 需要……,适合需要提升相关任务效率的用户。</p>
</div>
<a rel="nofollow" href="/ai/2884" title="Codex Bridge" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
- 逐对检查相邻元素 (prev, curr),仅当 curr == prev + 1 或 prev == n and curr == 1 时视为合法转移;
- 显式校验输入范围与唯一性,确保符合题设“唯一、全部连续”的要求;
- 时间复杂度为 O(k)(k 为子集长度),空间复杂度 O(k)(仅用于去重检查),远优于字符串拼接模板法(O(n²) 构建 + O(n·k) 查找)。
注意事项:
- 该函数不自动排序输入——顺序敏感,[1,3,2] 与 [1,2,3] 结果不同;
- 若需支持任意起始方向(如允许逆序循环如 [3,2,1] → [3,2,1] 在 n=3 下也合法),需额外定义“循环单调性”,但本题明确要求正向连续(见 foo([3,2,1]) → False);
- 实际部署时建议增加类型检查(如 isinstance(seq, (list, tuple)))和空序列防护,以提升鲁棒性。
此方案兼顾可读性、性能与健壮性,适用于竞赛编程、嵌入式状态校验及游戏逻辑开发等场景。










