python实现数组中多元素的和最接近于一个固定值,返回各元素的位置查找到的元素

数组中多元素的和最接近于一个固定值,返回各元素的位置查找到的元素


主要场景:在数组中找到多个元素的和最接近于一个给定值,且这些元素不一定是连续的

回溯法:通过递归进行尝试和回退,逐步构建可能的元素组合,并在发现一个组合的和接近目标值时记录。

from itertools import combinations  
  
def find_closest_sum(arr, target):  
    n = len(arr)  
    closest_sum = float('inf')  #初始化为一个正无穷极大值  
    closest_combination = None  # 最接近的组合的元素列表  
    closest_indices = None      # 最接近组合的索引列表  
      
    # 遍历所有可能的组合(包括组合长度为1到n的情况)  
    for r in range(1, n + 1):  
        for comb in combinations(range(n), r):  
            current_sum = sum(arr[i] for i in comb)  
            # 如果当前和比之前的结果更接近目标值  
            if abs(current_sum - target) < abs(closest_sum - target):  
                closest_sum = current_sum  
                closest_combination = [arr[i] for i in comb]  
                closest_indices = list(comb) 
    return closest_indices, closest_sum, closest_combination  # 返回索引、和以及组合的元素  
  
# 示例用法  
arr = [5.2, 2.11, 3.44, 100, 4.89]  
target = 11.34 
indexArr, closest_sum, closest_combination = find_closest_sum(arr, target)  
print(f"最接近 {target} 的组合索引为: {indexArr}, 其元素为: {closest_combination}, 其和为: {closest_sum}")
from itertools import combinations  

def find_closest_sum(arr, num):
    
    res = []
    _min = sum(arr)
    for i in range(2, len(arr) + 1):
        _iter = combinations(arr, i)
        for lt in _iter:
            if abs(sum(lt) - num) < _min:
                _min = abs(sum(lt) - num)
                res = lt
    return res  
  
# 测试用例 
arr = [5.2, 2.11, 3.44, 100, 4.89]  
target = 11.34  
indexArr= find_closest_sum(arr, num)  
print(indices)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值