前言

感谢热心的Johann.C进行算法测试、
这是今天在帮助实现赛项题目解时所发现的一个算法。我将其命名为Hash Sum Table ,即哈希求和表,为实现以一和求其多和数。这也是根据某算法进行的理论改动。
本人目前算法领域不精,慎阅,也欢迎讨论。

题解

题目描述

给定整数数组nums 和一个整数值 target,在数组中找出可组为和target的数值。

图文解

嗯…根据我当时画出的分析图来吧( 红色部分 )

上部的nums为哈希表中的V
下面索引即为K
此处测试初始化 target = 13
// 此处针对的时从小到大排列的数据集合, 关于去重会在后面解释
将target值减去数组nums中值,得到新值(如12 , 13-1=12)并将数组中被减去的值添加到HashMap中与下标对应, 此处即为上部的 nums ( 嘛…我确实应该直接把它命名为HashMap…就不需要我来解释了(😓) )
再将新值按照之前步骤重复 , 如果减到最后得到负值,那就从数组第一个数重新遍历计算,(但是相减得到负值的减数不要加入到HashMap中)如下图,

最后计算哈希表中出现的下标次数 乘 对应的值 其和即为target

也许你也发现了,这样的算法会出现重复的值,关于去重,我们所发现的一种方法是将数组以从大到小的顺序排列,中间遇到负值的情况直接跳过计算下一个数即可 . 即可防止重复值的出现。