给出一组数 找出a+b=c+d的组合
题目
给出一组数 找出a+b=c+d的组合
思路
方法1:蛮力法实现
四重遍历法我这里就不展开介绍了时间复杂度为O(N4).
下面就看代码实现:
public static int getDuplicateNum(int[] arr){
if (arr.length==0) return -1;
HashMap<Integer,Integer> map=new HashMap<>();
int res=0;
for (int i = 0; i <arr.length ; i++) {
if (!map.containsKey(arr[i])){
map.put(arr[i],i);
}else {
res=arr[i];
break;
}
}
return res;
}
方法2:HashMap实现
定义一个对象记录数对的组合HashMap保存的键为数对的和值为数对的对象
下面就看代码实现:
class Pair{
//用来保存数组的下标
int first;
int second;
Pair(int first,int second){
this.first=first;
this.second=second;
}
}
HashMap代码实现
public static void numberPairsTwo(int arr[]){
HashMap<Integer,Pair> map=new HashMap<Integer, Pair>();
int n=arr.length;
for (int i = 0; i <n ; i++) {
for (int j = i+1; j <n ; j++) {
int sum=arr[i]+arr[j];
if (!map.containsKey(sum)){
map.put(sum,new Pair(i,j));
}else {
Pair pair = map.get(sum);
System.out.println("("+arr[pair.first]+","+arr[pair.second]+")"+","+"("+arr[i]+","+arr[j]+")");
}
}
}
测试代码:
public static void main(String[] args) {
numberPairsTwo(new int[]{3,4,7,10,20,9,8});
}
结果:
(3,8),(4,7)
(3,10),(4,9)
(3,9),(4,8)
(7,10),(9,8)