You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化指定规则降序序列集合中目标数最优匹配的查找方法

高效实现思路

首先对序列规则做数学推导:每个步长x(取值范围1≤x≤13)对应的序列第k项(k≥0,k=0为起始项,k越小代表出现越早)可以简化为通项公式:
(120 - x) - k*x = 120 - x*(k+1)

如果给定数字n属于该序列,等价于存在正整数m(m = k+1),满足n = 120 - x * m,变形后可得固定值S = 120 - n,上述等式等价于x * m = S。

我们的核心目标是让n出现最早,也就是m最小。S固定的前提下,m = S/x,因此x越大,m越小,n出现的位置越早。只要找到最大的、满足能整除S、且取值在1到13之间的x,就是所求的最优步长。

实现步骤

  • 边界校验:如果n < 0 或者 n > 119,直接返回无结果,n不可能出现在任何序列中
  • 计算固定值S = 120 - n
  • 从13到1倒序遍历x,判断S是否能被x整除:
    • 找到第一个满足条件的x,就是最优步长,对应的起始值为120 - x,n在序列中的位置为k = (S/x) - 1
    • 由于x=1一定能整除S,因此遍历必然会找到符合条件的结果

代码示例(Python)

def find_optimal_sequence(n):
    if n < 0 or n > 119:
        return None
    S = 120 - n
    # 倒序找最大的符合条件的x
    for x in range(13, 0, -1):
        if S % x == 0:
            return {
                "最优步长": x,
                "序列起始值": 120 - x,
                "n在序列中的索引(从0开始)": (S // x) - 1
            }
    return None

# 测试用户示例n=104
print(find_optimal_sequence(104))
# 输出:{'最优步长': 8, '序列起始值': 112, 'n在序列中的索引(从0开始)': 1}

该实现最多仅需要遍历13次,时间复杂度为O(1),完全不需要生成任何序列,效率远高于暴力生成序列的方案。

内容的提问来源于stack exchange,提问作者NPKubley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:54:04