乐信2019秋招笔试真题---------3数和

题目描述

给定一个包括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);
			}
		}
		}
}

解释一下这里为什么要用Set集合,因为这里利用Set集合本身的性质(无序不可重复),可以将遍历出重复的值去掉,大大减小了程序的运行时间。后面对集合遍历进行查询。

若发现代码有问题,请留言。 不喜勿喷!!!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值