华为OD机试真题B卷 JavaScript 实现【乱序整数序列两数之和绝对值最小】,附详细解题思路

在这里插入图片描述

一、题目描述

给定一个随机的整数(可能存在正整数和负整数)数组 nums,请你在该数组中找出两个数,其和的绝对值(|nums[x]+nums[y]|)为最小值,并返回这个两个数(按从小到大返回)以及绝对值。

每种输入只会对应一个答案。

但是,数组中同一个元素不能使用两遍。

二、输入描述

一个通过空格分割的有序整数序列字符串,最多1000个整数,且整数数值范围是 [-65535, 65535]。

三、输出描述

两数之和绝对值最小值。

四、解题思路

  1. 定义变量 sum 初始化为 65535*2,用于保存当前最小的绝对值和;
  2. 定义数组 arr,长度为 2,用于保存找到的两个数的索引;
  3. 对 nums 进行升序排序;
  4. 使用两层循环遍历 nums,对于每对不同的元素 nums[i] 和 nums[j](i < j):
    • 计算它们的和的绝对值 temp = |nums[i] + nums[j]|
    • 如果 temp <= sum,则更新 sum = temp,并将当前索引 i 和 j 存入数组 arr。
  5. 输出结果,即 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机试真题B卷 JavaScript 实现【乱序整数序列两数之和绝对值最小】,附详细解题思路_第1张图片


下一篇:华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

本文收录于,华为OD机试(JavaScript)真题(A卷+B卷)

每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,javascript,开发语言)