【题目】:
输入:int[]nums int target
输出:符合要求的所有情况
给定一个int类型的数组,sum2、sum3、sum4分别输出2、3、4个元素的和为target的所有结果,不能重复,并且结果从小到大排序。
【解法】:
三个题目均可以使用双指针的做法。首先对原始数组进行排序,排序的意义为:(1)保证最后结果的有序性;(2)从小到大的查找是否满足target,若小于他,则start指针往前走,若大于他,这end指针往回走;
接着第一个指针从最小的元素开始,第二个指针从最大的元素开始,通过对和与target进行比较,判断start和end的走向。
sum2可以不用循环,只需要两个指针。同时sum2还可以有另一种解法,从左到右判断,采用一个集合保存判断过的结果,从集合中查找target-nums[i]是否存在;(n)
sum3采用一层循环,start从循环处的下一个元素开始(n`2)
sum4采用两层循环,第二层循环从第一层循环的i值开始,最内部start从第二层循环的下一个元素开始。(n`3)
***************************************sum2******************************************************************
方法1,采用map对