C ++中最大大小为2的最小分区和总和受给定值限制
问题陈述
给定一个数组arr[]为正数,找到满足以下属性的数组中的最小集合数,
一个集合中最多可以包含两个元素。这两个元素不必是连续的。
set元素的总和应小于或等于给定的Key。可以假定给定键大于或等于最大数组元素。
示例
如果arr[]={1,2,3,4}并且k=5,那么可以创建以下两对-
{1,4}和{2,3}
算法
对数组排序
从已排序数组的两个角开始两个指针。如果它们的总和小于或等于给定的键,则将它们组合,否则我们仅考虑最后一个元素
示例
#include <iostream> #include <algorithm> using namespace std; int getMinSets(int *arr, int n, int key) { int i, j; sort (arr, arr + n); for (i = 0, j = n - 1; i <= j; ++i) { if (arr[i] + arr[j] <= key) { --j; } } return i; } int main() { int arr[] = {1, 2, 3, 4}; int key = 5; int n = sizeof(arr) / sizeof(arr[0]); cout << "Minimum set = " << getMinSets(arr, n, key) << endl; return 0; }
输出结果
当您编译并执行上述程序时。它产生以下输出-
Minimum set = 2