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

如何动态实现数组元素的均匀分布排列?

动态实现数组元素均匀分布的方案

核心思路

要实现任意长度、任意元素比例的数组均匀分布,关键是先统计各元素的出现次数,再通过均匀插值计算每个元素应该放置的位置,最后按位置排序生成目标数组。

具体实现(Python)

from collections import Counter

def distribute_elements_uniformly(arr):
    total_length = len(arr)
    if total_length == 0:
        return []
    
    # 统计每个元素的出现频次
    element_counts = Counter(arr)
    pos_val_pairs = []
    
    for element, count in element_counts.items():
        # 计算每个元素的分布间隔,确保位置均匀分布
        interval = total_length / count
        for idx in range(count):
            # 计算目标位置,四舍五入保证分布均匀
            target_pos = round(idx * interval)
            # 处理位置冲突(避免多个元素占据同一索引)
            while target_pos in [p for p, _ in pos_val_pairs]:
                target_pos = target_pos + 1 if target_pos < total_length - 1 else target_pos - 1
            pos_val_pairs.append((target_pos, element))
    
    # 按位置排序后提取元素
    pos_val_pairs.sort(key=lambda x: x[0])
    return [val for _, val in pos_val_pairs]

# 测试示例
original_array = [0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1]
output_array = distribute_elements_uniformly(original_array)
print(output_array)  # 输出: [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

方案说明

  1. 统计频次:用Counter快速统计原数组中每个元素的出现次数,适配任意可哈希的元素类型。
  2. 计算位置:通过总长度除以元素数量得到间隔,用线性插值生成每个元素的目标位置,四舍五入保证分布均匀。
  3. 冲突处理:当总长度无法被元素数量整除时,可能出现位置重复,通过微调位置避免索引冲突。
  4. 通用适配:无论数组长度、元素比例如何变化,都能自动生成均匀分布的结果,比如输入[2,2,3,3,3],会输出类似[2,3,2,3,3]的均匀分布数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:45:30