如何将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
相关产品推荐
相关产品推荐

