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

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

 

posted @ 2022-03-26 22:21  Jukim  阅读(735)  评论(0编辑  收藏  举报