华为机试【1、两数之和绝对值最小】

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

def min_abs(s):
    arr = [int(x) for x in str(s).split(" ")]
    a = arr[0]
    b = arr[1]
    min = abs(a + b)
    for i in range(len(arr) - 1):
        for j in range(i + 1, len(arr)):
            if abs(arr[i] + arr[j]) < min:
                a = arr[i]
                b = arr[j]
                min = abs(a + b)
    return a, b, min


print(min_abs("-1 -3 7 5 11 15"))
全部评论
这题还可以再优化成o(n)吧
1 回复 分享
发布于 2022-05-08 16:57
单循环,两头往中间收紧就好了
1 回复 分享
发布于 2022-05-29 23:26
int i = 0, j = array.length - 1; int min = Integer.MAX_VALUE; int left = i, right = j, result = 0, mutex = 0; while (i < j){ result = array[i] + array[j]; mutex = Math.abs(result); if (mutex < min){ min = mutex; left = i; right = j; } if (result > 0){ j--; } else if (result < 0){ i++; }else { min = 0; return; } }
点赞 回复 分享
发布于 2022-11-10 01:33 河南

相关推荐

野猪不是猪🐗:这种直接口头上答应,骗面试,面完了直接拉黑,相当于给自己攒面经了(
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

更多
牛客网
牛客企业服务