标签:code 解法 题目 maximum sort exp -- pairs 一个
题目链接
给定大小为 2n 的整型数组,你的任务是将这些整数分为n
组,即 (a1,b1), (a2, b2),...,(an, bn),使得所有的 min(ai,bi) 之和最大,其中i的值为从1到n。
输出上述要求中的和。
n
是一个正数,范围是 [1,10000]。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).
一般解法:排序,每隔一个取值作和。
class Solution
{
public:
int arrayPairSum(vector<int>& nums)
{
std::sort(nums.begin(), nums.end());
int sum = 0;
for (int i = 0; i < nums.size(); i+=2)
{
sum += nums[i];
}
return sum;
}
};
极限解法
由于给定范围,可考虑用桶排序加快速度。
/*
=
= = = = =
= = = = = = =
= = = = = = = =
bucket[0][1][2][3][4][5][6][7][8]
*/
class Solution
{
public:
int arrayPairSum(vector<int>& nums)
{
int sum = 0;
//bucket[i]即为某个值的数量
vector<int> bucket(20001, 0);
for (int i = 0; i < nums.size(); i++)
{
bucket[nums[i] + 10000]++;
}
int flag = 0;
int i = 0;
while (i < bucket.size())
{
if (bucket[i] > 0 && flag == 0)
{
sum += (i - 10000);
bucket[i]--;
flag = 1;
}
else if (bucket[i] > 0 && flag == 1)
{
bucket[i]--;
flag = 0;
}
else
{
i++;
}
}
return sum;
}
};
[leetcode][easy][Array][561][Array Partition I]
标签:code 解法 题目 maximum sort exp -- pairs 一个
原文地址:https://www.cnblogs.com/libinyl/p/10134878.html