28.参赛队伍数量问题
用数组代表每个人的能力一个比赛活动要求 参赛团队的最低能力值为N,每个团队可以由一人或者两人组成
且一个人只能参加一个团队,计算出最多可以派出多少只符合要求的队伍
输入描述
5
3 1 5 7 9
8
第一行代表总人数,范围 1~500000
第二行数组代表每个人的能力,数组大小范围 1~500000,元素取值范围 1~500000
第三行数值为团队要求的最低能力值,1~500000
输出描述
3
最多可以派出的团队数量
示例一
输入
5
3 1 5 7 9
8
输出
3
说明 3、5组成一队 1、7一队 9自己一队 输出3
查看代码
import java.util.*;
public class Demo28 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int people = Integer.parseInt(sc.nextLine());
String[] split = sc.nextLine().split(" ");
int require = Integer.parseInt(sc.nextLine());
int len = split.length;
int[] ints = new int[len];
for(int i = 0; i < len; i++){
ints[i] = Integer.parseInt(split[i]);
}
Arrays.sort(ints);
int count = 0;
//用下标来处理,真妙啊
int left = 0, right = len - 1;
while(left < right){
if(ints[right] >= require){
count++;
right--;
}else{
if(ints[left] + ints[right] >= require){
count++;
left++;
right--;
}else left++;
}
}
System.out.println(count);
}
}
总结:这种用下标处理问题的方式要好好感受,为解题思路增添动力。