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

求推荐计算固定距离区间最快用时的低资源高效算法

高效算法方案推荐

首先默认你给出的data_list是按distance严格单调递增排序的(跑步打点数据天然符合该特征,无需额外排序操作),最优选择是双指针(滑动窗口)算法,完全满足运行速度快、资源占用低的要求。


算法思路

因为距离是单调递增的,我们可以用两个指针分别维护区间的左右边界,全程只遍历一次数据集即可得到结果:

  1. 初始化左指针left = 0,最小时间min_time = 无穷大,以及对应的起止距离变量
  2. 右指针right从0开始遍历所有打点数据:
    • 计算当前左右指针对应点的距离差 dist_gap = data_list[right]['distance'] - data_list[left]['distance']
    • 当dist_gap大于等于指定的distance_interval时,进入窗口收缩逻辑:
      • 计算当前区间的用时:如果要求区间端点必须是已有的打点数据,直接取time_gap = data_list[right]['time'] - data_list[left]['time'];如果允许区间跨打点(更贴合实际使用场景),可以用线性插值计算刚好凑够distance_interval时的精确用时
      • 如果当前用时小于min_time,更新min_time和对应的起止距离
      • 左指针右移一位,重新计算距离差,直到距离差小于指定区间长度
  3. 遍历完成后输出记录的最小时间和对应起止距离即可

伪代码示例

# 前置校验:总距离不足直接返回
total_dist = data_list[-1]['distance'] - data_list[0]['distance']
if total_dist < distance_interval:
    return None

left = 0
min_time = float('inf')
res_start = res_end = 0
n = len(data_list)

for right in range(n):
    # 窗口距离满足要求时收缩左边界
    while data_list[right]['distance'] - data_list[left]['distance'] >= distance_interval:
        current_time = data_list[right]['time'] - data_list[left]['time']
        # 更新最优结果
        if current_time < min_time:
            min_time = current_time
            res_start = data_list[left]['distance']
            res_end = data_list[right]['distance']
        left += 1

# 输出结果
return {
    "fastest_interval_start_distance": res_start,
    "fastest_interval_end_distance": res_end,
    "fastest_interval_time": min_time
}

复杂度说明

  • 时间复杂度:O(n),左右指针各遍历数据集一次,无嵌套循环,十万级打点数据也可毫秒级返回结果
  • 空间复杂度:O(1),仅需几个临时变量存储状态,无需额外开辟存储空间,内存占用极低

边界情况处理

  • 提前校验数据集总距离是否小于指定区间长度,避免无结果的无效遍历
  • 如有多个连续打点距离相同(比如原地停留的异常数据),可提前去重,避免计算时出现除0错误(插值场景下)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:54:02