每日一题——两个数相加绝对值最小

一、题目

给定一个整数序列(存在正整数和负整数)数组args,请你再该数组中找出两个数,其和的的绝对值(|args[X]+args[y]|)为最小值,并返回这个绝对值。数组中同一个元素不能使用两遍,每种输入只会有一个输出。
输入描述:
一个通过空格分割的整数序列字符串,最多1000个整数,且整数数值范围是-65535~65535.
输出描述:
两个数相加的最小绝对值
示例1:
输入
15 11 7 -3 -1 5
输出
2

二、编码和测试

1.个人代码

代码如下(示例):

Scanner sc = new Scanner(System.in);
String[] source = sc.nextLine().split(" ");
Set<Integer> num = new HashSet<>();
for (String s : source) {
    num.add(Integer.parseInt(s));
}
List<Integer> number = num.stream().collect(Collectors.toList());
int count = -1;
for (int i = 0; i < number.size() - 1; i++) {
    for (int j = i + 1; j < number.size(); j++) {
        if (count == -1) count = Math.abs(number.get(i) + number.get(j));
        count = Math.abs(number.get(i) + number.get(j)) > count ? count : Math.abs(number.get(i) + number.get(j));
    }
}
System.out.println(count);

2.测试

测试如下(示例):

15 11 7 -3 -1 5
2
------------------
2 8 -5 -2 9 0
0
------------------
-3 -2 -1 0 1 2 3
0
------------------
-2 -1 3 4 6
1

测试用例全部通过。


总结

本题重点是要注意题目条件其和的绝对值最小以及同一个元素不能使用两遍,因此使用了Math类的abs函数取绝对值,使用Set自带去重的特性来去掉可能存在的相同元素,从而满足同一个元素不能使用两遍的条件,之后采用了双重for循环列举所有配对求和,再通过三元运算得到最小值。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值