如何实现计算数组元素所有可能和的功能?优化多循环实现方案
两数之和匹配目标值的简洁实现
针对你遇到的问题,用哈希表(字典)就能把复杂度降到O(n),彻底摆脱多层循环,还能解决浮点数精度的坑:
核心逻辑
遍历数组时,把已经看过的元素和它的索引存在哈希表里。对每个当前元素,计算目标值N - 当前元素的差值,检查哈希表里有没有近似等于这个差值的元素——如果有,那这两个元素的索引就是你要找的结果;如果没有,就把当前元素和索引存进哈希表继续遍历。
为什么要提“近似等于”?因为浮点数在计算机里存储有精度误差,比如0.4+0.4理论是0.8,但实际可能存成0.8000000001或者0.7999999999,直接用==会判断不相等,所以得用一个极小的阈值(比如1e-9)来判断差值是否足够小,视为相等。
Python代码实现
def find_two_sum(tab, target): num_index = {} epsilon = 1e-9 for idx, num in enumerate(tab): needed = target - num # 遍历哈希表找近似匹配的数 for stored_num, stored_idx in num_index.items(): if abs(needed - stored_num) < epsilon: return (stored_idx, idx) num_index[num] = idx return None # 没找到匹配对时返回 # 测试你的例子 N = 0.8 tab = [0.4, 0.1, 0.4, 0.5] print(find_two_sum(tab, N)) # 输出 (0, 2)
说说你之前算法的问题
你之前的逻辑判断value + tab[j] <= 0.8,这是在找和小于等于目标值的组合,不是严格等于。而且如果只从第一层循环的首个元素开始配对,会漏掉其他可能的组合,自然会出现结果小于0.8的情况。
内容的提问来源于stack exchange,提问作者lasource75
相关产品推荐
相关产品推荐

