You need to enable JavaScript to run this app. 从给定数字中查找总和≤指定值的所有5元素组合
优惠活动
大模型
产品
解决方案
定价
更多

从给定数字中查找总和≤指定值的所有5元素组合

5元素组合阈值筛选实现方案

通用场景规则

  • 适用范围:从任意规模的数字集合中,查找所有元素个数固定为5、元素总和不超过预设阈值的组合
  • 核心约束:筛选结果为无重复的无序组合,不会因元素排列顺序不同生成冗余结果
  • 效率优化核心:生成组合时固定元素的选取顺序(后选取元素的索引必须大于前一次选取的元素索引),从根源上消除重复组合,避免无效计算

特定场景落地(20个数字、阈值100)

  • 前置处理:将待筛选的20个数字按数值做升序排序,为剪枝优化提供基础
  • 分支剪枝逻辑:
    • 生成组合过程中,若当前累计的元素和已经超过100,直接终止当前分支的后续选取:因为数组升序排列,后续选取的元素数值只会更大,该分支下所有待生成的组合都不可能满足阈值要求
    • 若剩余可选取的数字数量,不足以凑满组合要求的5个元素,直接终止当前分支
  • 结果汇总:当组合元素数凑满5个且最终总和≤100时,将该组合纳入有效结果集
# 核心逻辑参考实现(输入:待筛选数字列表input_nums,阈值max_total=100)
input_nums.sort()
valid_groups = []
def generate_group(start_index, current_group, current_sum):
    # 凑满5个元素时校验总和
    if len(current_group) == 5:
        if current_sum <= max_total:
            valid_groups.append(current_group.copy())
        return
    # 剩余可选元素不足时提前终止
    if 5 - len(current_group) > len(input_nums) - start_index:
        return
    for idx in range(start_index, len(input_nums)):
        # 当前元素加入就超阈值,后续元素更大,直接跳出循环
        if current_sum + input_nums[idx] > max_total:
            break
        current_group.append(input_nums[idx])
        generate_group(idx + 1, current_group, current_sum + input_nums[idx])
        current_group.pop()
generate_group(0, [], 0)

实现说明:如果原始数字集合中存在重复值,可根据业务需求决定是否对重复数值做去重处理,避免生成数值完全一致的重复组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 23:45:03