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

如何计算列表中整数到最近0的距离?解决索引越界问题

解决列表元素到最近0的距离问题,同时避免索引越界

你遇到的索引越界问题根源很明确:用while list[index] != 0循环找0时,没给index加边界限制——比如当你从某个位置往左/右找0,但方向上根本没有0时,index会一直往超出列表范围的方向跑(比如变成-1或者大于列表长度的数),自然就触发索引越界了。

给你一个简单可靠的方案,用两次遍历就能搞定,完全不会有越界问题:

思路

  1. 左→右遍历:记录每个位置到左边最近0的距离
  2. 右→左遍历:记录每个位置到右边最近0的距离,然后和左→右得到的距离取最小值,就是该位置到最近0的距离

代码示例(Python)

def nearest_zero_distance(nums):
    n = len(nums)
    result = [float('inf')] * n
    
    # 左→右遍历,找左边最近的0
    last_zero = -float('inf')
    for i in range(n):
        if nums[i] == 0:
            last_zero = i
            result[i] = 0
        else:
            result[i] = i - last_zero
    
    # 右→左遍历,找右边最近的0,取最小值
    next_zero = float('inf')
    for i in range(n-1, -1, -1):
        if nums[i] == 0:
            next_zero = i
            result[i] = 0
        else:
            result[i] = min(result[i], next_zero - i)
    
    return result

# 测试示例
input_list = [5, 0, 8, 87, 96, 0, 54]
print(nearest_zero_distance(input_list))  # 输出 [1, 0, 1, 2, 1, 0, 1]

代码解释

  • 第一次遍历:从左往右走,遇到0就更新last_zero的位置,非0元素的距离就是当前索引减last_zero(因为左边最近的0就在last_zero位置)
  • 第二次遍历:从右往左走,遇到0就更新next_zero的位置,非0元素的距离取当前值(左边的距离)和next_zero - 当前索引(右边的距离)里更小的那个
  • 用float('inf')初始化结果列表,是为了保证第一次遍历时,左边没有0的元素(比如列表开头的元素)会被赋予一个很大的初始值,第二次遍历时会被右边的距离覆盖

这样既解决了你的需求,又完全不会出现索引越界的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:47:12