华为 OD 机考 Python【求最多可以派出多少支团队】

题目

用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或者2人组成,且1个人只能参加1个团队,计算出最多可以派出多少只符合要求的团队。

输入描述
第一行代表总人数,范围1-500000
第二行数组代表每个人的能力
数组大小,范围1-500000
元素取值,范围1-500000
第三行数值为团队要求的最低能力值,范围1-500000
输出描述
最多可以派出的团队数量

用例
输入 5
3 1 5 7 9
8
输出 3
说明 3、5组成一队 1、7一队 9自己一队 输出3
输入 7
3 1 5 7 9 2 6
8
输出 4
说明 3、5组成一队,1、7一队,9自己一队,2、6一队,输出4
输入 3
1 1 9
8
输出 1
说明 9自己一队,输出1

解题思路

  • 对人员能力数组进行升序排序,以便后续处理。
  • 使用两个指针 l 和 r 分别指向数组的开头和结尾。
  • 首先处理单人组队的情况,即能力大于等于最低要求的人数统计出来。
  • 然后进入双人组队的逻辑:当 l 小于 r 时,进行以下循环:
    • 计算当前 l和 r 指向的人的能力之和 sum。
    • 如果 sum 大于等于 minCap,则可以组成一个团队,团队数量加一,同时移动 l 和 r 指针。
    • 如果 sum 小于 minCap,则需要将能力较低的人剔除,移动 l 指
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

codereasy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值