系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、java代码
- 五、测试用例
前言
本人最近再练习算法,所以会发布自己的解题思路,希望大家多指教
一、题目描述
又到了一年的末尾,项目组让小明负责为使得参加晚会的同时所获得的小礼品价值相对平衡,需要把小礼品根据价格进行分组,但每组最多只能包括两件小礼品,并且每个分组的价格总和不能超过一个价格上限。
为了保证发放小礼品的效率,小明需要找到分组数目最少的方案。
你的任务是写一个程序,找出分组数最少的分组方案,并输出最少的分组数目。
二、输入描述
第一行数据为分组礼品价格之和的上限
第二行数据为每个小礼品的价格,按照空格隔开,每个礼品价格不超过分组价格和的上限。
10
5 5 10 2 7
三、输出描述
输出最小分组数量。
3
四、java代码
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int max = Integer.parseInt(scanner.nextLine());
int[] array = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
//从小到大排序,方便后面遍历分组求和
Arrays.sort(array);
//初始化分组数目
int sum = 0;
int right = array.length - 1;
int left = 0;
while (right >= left) {
//如果最小的和最大的和小于等于max,则合为一组,否则比较大的为单独一组
if (array[left] + array[right] <= max) {
left++;
}
sum++;
right--;
}
System.out.println(sum);
}
五、测试用例
输入:
10
1 2 3 4 5 7 9
输出: