Leetcode答题 --- 数组拆分 I

    技术2022-07-10  147

    题目

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

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/array-partition-i 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    示例

    输入: [1,4,3,2] 输出: 4 解释: n 等于 2, 最大总和为 4 = min(1, 2) + min(3, 4).

    思路

    先排序,再循环获取值

    实现

    var arrayPairSum = function(nums) { let sortArr = nums.sort((a, b) => a - b) let sum = 0 for (let i = 0; i < sortArr.length; i+=2) { if (i + 1) { sum += Math.min(sortArr[i], sortArr[i+1]) } else { sum += sortArr[i] } } return sum };

    另一种解法

    来自题解

    它想要得到选出两个数最小值后,全部加起来得到最大值

    所以要把两个数相差最小的为一对, 从小排到大后, 就可以得到 一个增序数组, 两两一对(1,2),(3,4)(5,6)…

    取两两之间的最小值 可以知道 这个数组中 排序为 偶数的 为最小值 , 所以筛选出偶数项后,把每项加起来就行了.

    作者:shetia

    链接:https://leetcode-cn.com/problems/array-partition-i/solution/pai-xu-shai-xuan-hui-zong-by-shetia/

    解法

    var arrayPairSum = function(nums) { return nums.sort((a,b)=>a-b).filter((item,index)=> index % 2 === 0).reduce((t,i)=> t+i) };
    Processed: 0.017, SQL: 9