一、题目描述
给定一个随机的整数(可能存在正整数和负整数)数组 nums,请你在该数组中找出两个数,其和的绝对值(|nums[x]+nums[y]|)为最小值,并返回这个两个数(按从小到大返回)以及绝对值。
每种输入只会对应一个答案。
但是,数组中同一个元素不能使用两遍。
二、输入描述
一个通过空格分割的有序整数序列字符串,最多1000个整数,且整数数值范围是 [-65535, 65535]。
三、输出描述
两数之和绝对值最小值。
四、解题思路
- 定义变量 sum 初始化为 65535*2,用于保存当前最小的绝对值和;
- 定义数组 arr,长度为 2,用于保存找到的两个数的索引;
- 对 nums 进行升序排序;
- 使用两层循环遍历 nums,对于每对不同的元素 nums[i] 和 nums[j](i < j):
- 计算它们的和的绝对值 temp = |nums[i] + nums[j]|
- 如果 temp <= sum,则更新 sum = temp,并将当前索引 i 和 j 存入数组 arr。
- 输出结果,即 list[arr[0]]、list[arr[1]] 和 sum。
五、JavaScript算法源码
function findMin(nums) {
// 用于保存当前最小的绝对值和
let sum = 65535 * 2;
// 保存找到的两个数的索引
let arr = [0, 0];
// 排序
nums.sort((a, b) => a - b);
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
// 计算绝对值
const temp = Math.abs(nums[i] + nums[j]);
if (temp <= sum) {
// 更新 sum = temp
sum = temp;
// 将当前索引 i 和 j 存入数组 arr
arr[0] = nums[i];
arr[1] = nums[j];
}
}
}
return [arr[0], arr[1], sum];
}
六、效果展示
1、输入
[5,-4,8,-9,10,12]
2、输出
-4,5,1
3、说明
🏆下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。