@leetcode–数组拆分 I
题目
给定长度为 2n 的数组, 任务是将这些数分成 n 对(每组两个), 例如 (a1, b1), (a2, b2), …, (an, bn) ,使得从1 到 n 的 min(ai, bi) 总和最大,求最大值。
示例
输入: [1,4,3,2]
输出: 4
最大总和为 4 = min(1, 2) + min(3, 4)
思路
先用数学的思维,观察数据,想到如果max最大,就要让两两组合之后取最小的过程中损失最小,于是就要知道a-b最小的情况就是两者最为接近,于是想到先排序,之后直接两两自动分账,取得每组第一个数字就是最小。
代码
public int arrayPairSum(int[] nums) {
Arrays.sort(nums);
int max= 0;
for(int i = 0;i<nums.length;i= i+2){
max+= nums[i];
}
return max;
}
结果
时间复杂度:先排序nlog(n),之后遍历一轮
空间复杂度:只占用了一个变量max的空间O(1)