问题描述:给定一个数组{1,7,17,2,6,3,14},这个数组中满足条件的有两对组合——17+3=20和6+14=20。
方法一:暴力法。两轮循环暴力查找。
package com.haobi;
/*
* 如何求数组中两两相加等于50的组合
*/
public class Test5 {
public static void findSum(int[] a, int sum) {
int length = a.length;
for(int i=0;i<length;i++) {
for(int j=i;j<length;j++) {
if(a[i]+a[j] == sum) {
System.out.println(a[i]+" "+a[j]);
}
}
}
}
public static void main(String[] args) {
int[] array = {1,7,17,2,6,3,14};
findSum(array, 20);
}
}
方法二:排序法(对撞指针/双索引)。先对数组进行排序,可采取快排(O(nlogn)),然后对排序后的数组分别从前到后和从后到前遍历。假设从前往后遍历的下标为begin,从后往前遍历的下标为end,需要注意的是,(1)当arr[start]+arr[end]<20时,如果存在两个数的和为20,那么这两个数一定在[start+1,end]之间;(2)当arr[start]+arr[end]>20时,