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

如何将n个元素均匀分配到大小为M的数组中?

数组均匀填充的高效动态实现方法

要实现数组的均匀填充,核心是直接计算每个待填充元素的索引,避免遍历整个数组,这种方法时间复杂度为O(K)(K是要填充的元素数量),高效且能动态适配任意数组大小N和填充数量K。

两种常用的均匀填充逻辑

1. 匹配你给出示例的填充逻辑(固定步长向上取整)

这种逻辑会让每个填充元素之间的间隔尽可能一致,最后一个元素靠近数组末尾(如你示例中10个元素填3个时,间隔为4)。
计算方式:

  • 步长取 (N + K - 1) // K(对N/K向上取整)
  • 从索引0开始,每次累加步长,直到填充完K个元素

代码示例(Python):

def uniform_fill(arr_size, fill_count, fill_val=1):
    arr = [0] * arr_size
    if fill_count <= 0:
        return arr
    # 计算向上取整的步长
    step = (arr_size + fill_count - 1) // fill_count
    current_idx = 0
    for _ in range(fill_count):
        if current_idx >= arr_size:
            break
        arr[current_idx] = fill_val
        current_idx += step
    return arr

# 测试你的示例
print(uniform_fill(10, 5))  # 输出 [1, 0, 1, 0, 1, 0, 1, 0, 1, 0]
print(uniform_fill(10, 3))  # 输出 [1, 0, 0, 0, 1, 0, 0, 0, 1, 0]
# 测试100数组填60个元素的场景
result = uniform_fill(100, 60)

2. 全局最均匀的填充逻辑(平衡余数)

如果希望填充元素在整个数组范围内分布更均匀,包括首尾的间隔,可以通过平衡余数的方式计算索引:

  • 基础步长为 N // K
  • 前N % K个填充元素的步长多1,抵消数组长度无法被填充数整除的余数

代码示例(Python):

def balanced_uniform_fill(arr_size, fill_count, fill_val=1):
    arr = [0] * arr_size
    if fill_count <= 0 or fill_count >= arr_size:
        return [fill_val]*arr_size if fill_count >= arr_size else arr
    base_step = arr_size // fill_count
    remainder = arr_size % fill_count
    current_idx = 0
    for i in range(fill_count):
        arr[current_idx] = fill_val
        # 前remainder个元素多走一步,平衡分布
        current_idx += base_step + (1 if i < remainder else 0)
    return arr

# 测试100数组填60个元素
balanced_result = balanced_uniform_fill(100, 60)

动态实现说明

这两种方法都支持动态传入任意的数组大小arr_size和填充数量fill_count,不需要提前写死逻辑,只要参数合法(0 < fill_count < arr_size),就能自动计算并生成均匀填充的数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:05:22