题目
用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或者2人组成,且1个人只能参加1个团队,计算出最多可以派出多少只符合要求的团队。
输入描述
-
第一行代表总人数,范围1-500000
-
第二行数组代表每个人的能力
- 数组大小,范围1-500000
- 元素取值,范围1-500000
-
第三行数值为团队要求的最低能力值,范围1-500000
输出描述
最多可以派出的团队数量
用例
输入
5
3 1 5 7 9
8
输出
3
解题思路
采用贪心算法。首先对数组进行排序,然后使用双指针法来组合每个人的能力值:
1、对数组进行升序排序。
2、初始化两个指针,一个指向数组的开头(左指针),一个指向数组的末尾(右指针)。
3、从两端向中间扫描数组,尝试将左指针和右指针指向的元素组合成团队。
4、如果组合后的能力值满足要求,则形成一个团队,并移动两个指针;否则,仅移动右指针尝试找到更大的数与当前左指针的数进行组合。
5、重复上述过程,直到所有元素都被尝试组合。
代码
import