题目描述
给定一个包括n个整数的数组nums和一个目标值target。找出nums中的三个整数,使得他们的和与targer最接近。返回这三个数组的和。假定每组输入只存在唯一答案。
输入描述
nums = [-1,2,1,-4] targer =1
输出描述
与targer最接近的三个数的和为2. (-1+2+1=2)
输入样例
[-1,2,1,-4]
1
输出样例
2
package Test;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
public class ThreeSum {
public static void main(String[] args ) {
Collection c= new HashSet(); //c集合储存遍历出的三数和
Collection c1= new HashSet(); //c1集合储存c集合与targer的差值
Scanner s=new Scanner (System.in);
String str =s.next();
int targer =s.nextInt();
String str1 =str.substring(1,str.length()-1); //对输入的字符串进行处理
String[]a =str1.split(",");
int sum=9999;
for(int i=0;i<a.length;i++) {
for(int j=0;j<a.length;j++) {
for(int z =0;z<a.length;z++) {
if((i!=j)&&(i!=z)&&(z!=j)){
sum= (Integer.parseInt(a[i]))+(Integer.parseInt(a[j]))+(Integer.parseInt(a[z]));
}
c.add(sum);
}
}
}
Iterator it =c.iterator();
while(it.hasNext()) {
int a1= (int) it.next();
c1.add(Math.abs(targer-a1)); //将差值存储到c1集合
}
Iterator it1 =c1.iterator();
int min =999;
while(it1.hasNext()) { //找出最小的差值
int o =(int)it1.next();
if(o<min) {
min =o;
}
}
Iterator it2 =c.iterator();
while(it2.hasNext()) { //通过最小的差值找出对应元素
int a1= (int) it2.next();
if(Math.abs(targer-a1)==min) {
System.out.println(a1);
}
}
}
}