每日一题 -- 简单 -- 数组拆分(561)

35 阅读1分钟

题目: 给定长度为 2n ****的整数数组 nums ,你的任务是将这些数分成 n ****对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。返回该 最大总和 。

示例 1:

输入:nums = [1,4,3,2]
输出:4
解释:所有可能的分法(忽略元素顺序)为:
1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3
2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3
3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4
所以最大总和为 4

🙇‍♂️ 感想:这也是一道简单易懂的常规数组题

🙇‍♂️ 解题思路: 题目的要求是找出1-n对(bi, bj)中的最小值,但是又要使得这n对的最小值加起来是总和最大。即只需要将数组从小到大排序,然后两两相加即可得到最终结果

function arrayPairSum(nums: number[]): number {
  nums.sort((a, b) => a - b)
  let result: number = 0
  for (let i = 1; i < nums.length; i= i + 2) {
    result += Math.min(nums[i - 1], nums[i])
  }
  return result
};