我的思路:
1、先排序
2、两层循环嵌套,外面的一层从数组末尾开始,里面一层从头开始遍历,首先满足的条件就是这两个数都不能是 NULL 的,并且两个物品的价值加起来不大于最大价值,都满足之后就把两个物品都赋值为 NULL 表示能放入同一个组,sum + 1 计数并跳出循环,因为都为空了表示里面循环没必要继续进行下去;
3、当里面的循环遍历完成以后需要进行判断,因为有可能当里面的循环遍历之后没有能和它匹配的那么就只能把当前分一个组,赋值为 NULL 并 sum+1。
#####算是比较简洁的过程,思路也比较简单
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int max = sc.nextInt();
int num = sc.nextInt();
//创建数组保存值
Integer[] arr = new Integer[num];
for (int i = 0; i < num; i++) {
arr[i] = sc.nextInt();
}
//排序
Arrays.sort(arr);
int sum = 0;
//外层循环
for (int i = arr.length - 1; i >= 0; i--) {
//内层循环
for (int j = 0; j < arr.length; j++) {
//两个值都不为空并且两个值加起来不大于最大值
if (arr[j] != null && arr[i] != null && arr[i] + arr[j] <= max) {
arr[i] = null;
arr[j] = null;
sum++;
break;
}
}
//如果没有匹配的值就单独分一组
if(arr[i] != null) {
arr[i] = null;
sum++;
}
}
System.out.println(sum);
}
}
0.0分
1 人评分