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

如何编写算法将偶数长度数组元素配对使所有对和值相同?

数组元素配对:让所有配对和值相同的实现方法

核心思路

要实现所有配对和值一致,首先得确定目标和,接着验证数组是否具备配对条件,最后完成具体的配对操作。

算法步骤

  1. 计算目标和并验证可行性

    • 先算出数组所有元素的总和,目标和 = 总和 / (数组长度 / 2)(数组元素个数为偶数,因此数组长度/2就是配对总数)。
    • 如果总和无法被配对总数整除,直接返回无法完成配对——因为这种情况下不可能让所有配对的和值相同。
  2. 统计元素出现频率

    • 用字典(或哈希表)记录每个元素的出现次数,方便后续快速查询和更新剩余数量。
  3. 执行配对操作

    • 遍历数组中的每个元素:
      • 若当前元素的剩余频率为0,直接跳过。
      • 计算当前元素的补数:目标和 - 当前元素。
      • 检查补数的有效性:
        • 若补数不在字典中,或补数的剩余频率为0,返回无法配对。
        • 若补数和当前元素相同:要求该元素的剩余频率至少为2,否则无法配对。
        • 若补数和当前元素不同:要求补数的剩余频率至少为1,否则无法配对。
      • 完成配对后,更新字典中对应元素的频率(相同元素减2,不同元素各减1),并将配对结果存入结果列表。

代码示例(Python)

def pair_elements(arr):
    total_sum = sum(arr)
    pair_count = len(arr) // 2
    target_sum = total_sum / pair_count

    # 验证总和是否能被配对数整除
    if total_sum % pair_count != 0:
        return "无法完成配对"
    
    freq = {}
    for num in arr:
        freq[num] = freq.get(num, 0) + 1
    
    result = []
    for num in arr:
        if freq[num] == 0:
            continue
        complement = target_sum - num
        # 补数不存在或已无剩余
        if complement not in freq or freq[complement] == 0:
            return "无法完成配对"
        # 处理自身配对的情况
        if num == complement:
            if freq[num] < 2:
                return "无法完成配对"
            result.append([num, complement])
            freq[num] -= 2
        else:
            result.append([num, complement])
            freq[num] -= 1
            freq[complement] -= 1
    
    return result

# 测试示例
print(pair_elements([1, 2, 3, 2]))  # 输出 [[1, 3], [2, 2]]

注意事项

  • 若数组存在重复元素,需保证重复元素的数量满足配对要求(比如元素x需要和自身配对时,数量必须是偶数)。
  • 遍历过程中要跳过已完成配对的元素(即频率为0的元素),避免重复处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:57:35