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 = min(1, 2) + min(3, 4).
- n is a positive integer, which is in the range of [1, 10000].
- All the integers in the array will be in the range of [-10000, 10000].
A collection of hundreds of interview questions and solutions are available in our blog at Interview Question Solutions
Solution:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
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 = min(1, 2) + min(3, 4). | |
Note: | |
n is a positive integer, which is in the range of [1, 10000]. | |
All the integers in the array will be in the range of [-10000, 10000]. | |
*/ | |
import java.util.*; | |
public class ArrayPartitionI{ | |
/** | |
-sort the array | |
-take the min of every two numbers and accumulate the sum | |
O(nlogn) | |
*/ | |
public static int arrayPairSum(int[] nums) { | |
//base case | |
if(nums==null || nums.length==0){ | |
return 0; | |
} | |
if(nums.length%2!=0){ | |
return 0; | |
} | |
Arrays.sort(nums); | |
//now find the sum of the pairs | |
int sum = 0; | |
for(int i=0;i<nums.length; i+=2){ | |
sum+=Math.min(nums[i], nums[i+1]); | |
} | |
return sum; | |
} | |
public static void main(String args[]){ | |
int[] nums = new int[]{1,4,3,2}; | |
System.out.println("sum for array "+Arrays.toString(nums)+" is: "+arrayPairSum(nums)); | |
nums = new int[]{1,1}; | |
System.out.println("sum for array "+Arrays.toString(nums)+" is: "+arrayPairSum(nums)); | |
} | |
} |
No comments:
Post a Comment