题目描述
用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或2人组成,且1个人只能参加1个团队, 请计算出最多可以派出多少支符合要求的团队?
输入
输出
3 (最多可以派出的团队数量)
演示
示例一
说明:
最低能力要求 8 ,其中3,5一组,1,7一组,9单独一组总共3组
示例二:
说明
最低能力要求8,其中3,5一组,1,7一组,9单独一组,2,6一组
解题思路:
这就是比大小问题,首先将数组排序Arrays.sort(arr);从最大的开始遍历,将比要求能力大于等于的挑出,并总数count++;
然后进行两边循环遍历,找出符合自己的另一半。找到了,count++;同时,两边向中间+1;直到左右相等,停止。输出count.
上代码:
public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("输入"); int number = sc.nextInt(); int[] arr = new int[number]; for(int i = 0;i<number;i++){ arr[i] = sc.nextInt(); } int minPower = sc.nextInt(); Arrays.sort(arr); int count = 0; for(int i =number-1;i>=0;i--){ if(arr[i]>=minPower){ count++; } } int left = 0; int right = number - count - 1; while(left<right){ if(arr[left]+arr[right] >= minPower){ count++; left++; right--; }else{ left++; } } System.out.println("输出"); System.out.println(count); }