2022.6.23今天你刷题了吗?
题目:
给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(ai, bi) 总和最大。
返回该 最大总和 。
分析:
给你一个偶数数组,我们需要把这些数按两两一组分配,然后取每组分配的最小值,再把这些最小值求和使得求和值最大。
思路在于,为了让最后的结果最大,那么分配的时候必须取得的最小值就最大,所以我们可以把最大和次打分配,这样就可以保留一个最大数,同理,最小和次小分配,这样就可以保留一个较小数。因此只需要排序后,隔一个数进行求和。
解析:
class Solution {
public:
int arrayPairSum(vector<int>& nums) {
int sum = 0;
sort(nums.begin(), nums.end());
for (auto i = 0; i < nums.size(); i += 2)
{
sum += nums[i];
}
return sum;
}
};