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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值