首页 > 其他 > 详细

[LeetCode] 561. Array Partition I

时间:2018-11-11 10:19:02      阅读:196      评论:0      收藏:0      [点我收藏+]

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:

  1. n is a positive integer, which is in the range of [1, 10000].
  2. All the integers in the array will be in the range of [-10000, 10000].

 

Brute force solution‘s runtime will be too high when N is big. T(N) = (N - 1) * T(N - 2), where N is the length of the input array.

 

Efficient Solution using sorting

 1 class Solution {
 2     public int arrayPairSum(int[] nums) {
 3         if(nums == null || nums.length == 0) {
 4             return 0;
 5         }
 6         Arrays.sort(nums);
 7         int sum = 0;
 8         for(int i = 0; i < nums.length; i = i + 2) {
 9             sum += nums[i];
10         }
11         return sum;
12     }
13 }

 

Follow up question: 

1. change the question to make the sum of all  max(ai, bi) as large as possible.

2. change the question to make the sum of all max(ai, bi) as small as possible.

 

[LeetCode] 561. Array Partition I

原文:https://www.cnblogs.com/lz87/p/9941210.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!