题目
给定长度为 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)
};