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);
    }
}

总结:这种用下标处理问题的方式要好好感受,为解题思路增添动力。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM