561. Array Partition I

xiaoxiao2021-02-28  131

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; }

转载请注明原文地址: https://www.6miu.com/read-29911.html

最新回复(0)