数组中最大尺寸为 2,并且其总和小于给定值的最小划分
问题陈述
给定一个正数数组 arr[],找出满足以下属性的数组中的最小集合数:
- 一个集合最多包含两个元素。这两个元素无需连续。
- 集合中元素之和应小于或等于给定的键值。可以假设给定的键值大于或等于数组中的最大元素。
示例
如果 arr[] = {1, 2, 3, 4},k = 5,则可以创建以下 2 对:
{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
广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP