THREE SUM
在解决了数组中的两个数相加为一个目标值之后,问题有所提升:序列中的三个数相加的和为目标值。
思路:前面解决了两个数相加,那么从数组的头开始遍历
for 0--- i ->n 三个数的和为 sum
那么sum - array[i]就是剩下两个数相加的目标和。
这时候就可以将问题推到我们两个数相加的代码上,只要调用两个数相加目标和为某值的方法。
代码如下:
/** * 两个数相加的目标位target * @param target */ public static void twoSum1(int target,int z ){ Map<Integer,Integer> map = new HashMap<Integer,Integer>(); for(int i =z+1;i<array.length&&array[i]<=target;i++){ if(!map.containsKey(array[i])){ map.put(target-array[i], i); } if(map.containsKey(array[i])){ int k = map.get(array[i]); if(i!=k&&z!=i&&k!=z){ System.out.println("i is "+i+" j is "+k+" z is "+z); } } } } /** * 三个数相加的目标和为target * @param target * @param z */ public static void threeSum(int target,int z){ for(int i = z+1 ;i<array.length&&array[i]<=target;i++){ twoSum1(target-array[i],i); } }
那么一次类推,如果是四个数的和为一个目标值,那么代码就应该是这样的:
public static void fourSum(int target){ for(int i =0;i<array.length&&array[i]<=target;i++){ threeSum(target-array[i],i); } }
由此我们可以看出一定的规律,那么这将引出我们下面的一个问题:
判断给定数组中的任意的数相加的和等于剩下的数相加的和?
例如:{1,2,3} 1+2 =3 true
{1,3,3} false
{2,1,4,7} 2+1+4=7 true
{1,2,4,4,3} 1+2+4=4+3 true
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: jeesite整合单点登录
- 下一篇: c语言list嵌套遍历