561. Array Partition I
Given an array of 2n integers, your task is to group these integers into n pairs of integer, say (a1, b1), (a2, b2), ..., (an, bn) which makes sum of min(ai, bi) for all i from 1 to n as large as possible.
Example 1:
Input: [1,4,3,2] Output: 4 Explanation: n is 2, and the maximum sum of pairs is 4.
刚开始读题没有读懂,后来明白了这道题其实是求将数组中的元素两两组合,将所有组合中最小值相加,设计的算法要使该和最大。于是自己在纸上随便写了一个数组,并将它们两两组合,很容易发现,只有将两个值最相近的元素组合在一起才能使组合后的和的值最大,即:将最大的元素和第二大的元素组合在一起,将第三大的元素和第四大的元素组合......代码如下:
public static int arrayPairSum(int[] nums) {
int sum=0;
Arrays.sort(nums);
for(int i=0;i<nums.length;i++){
if(i%2==0){
sum += nums[i];
}
}
return sum;
}