【华为OD机试真题】最多派出多少支团队(100分)

【华为OD机试真题】最多派出多少支团队(100分),第1张

目录
  • 题目
    • 输入描述:
    • 输出描述:
    • 示例 1
    • 示例 2
    • 示例 3
  • 个人解法
  • 总结


题目

时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M

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

输入描述:

5
3 1 5 7 9
8
第一行数组代表总人数,范围[1,500000]
第二行数组代表每个人的能力,每个元素的取值范围[1, 500000],数组的大小范围[1,500000]
第三行数值为团队要求的最低能力值,范围[1, 500000]

输出描述:

3
最多可以派出的团队数量

示例 1

输入:
5
3 1 5 7 9
8
输出:
3

说明
3,5组成一队,1,7组成一队,9自己一个队,故输出3

示例 2

输入:
7
3 1 5 7 9 2 6
8
输出:
4

说明
1、7组成一队 3、5一队 2、6一队 9自己一队 输出4

示例 3

输入:
3
1 1 9
8

输出:
1

说明
1、9组成一队 或者9自己一队 输出1


个人解法

提示:个人学习,并非最优解,欢迎指正

双指针

while True:
    try:
        n = int(input().strip())
        list1 = list(map(int, input().strip().split()))
        list1.sort(reverse=True)
        N = int(input().strip())

        i , j , res = 0 , n - 1 , 0
        while i < j:
            if list1[i] >= N:
                res += 1
                i += 1
            elif list1[i] + list1[j] >= N:
                res += 1
                i += 1
                j -= 1
            else:
                j -= 1
        print(res)
    except Exception as e:
        break
总结

需要注意的地方:

  1. 本题比较简单,但是实际考试时有只通过了90%,不知道哪里错了

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1499246.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-25
下一篇 2022-06-25

发表评论

登录后才能评论

评论列表(0条)

保存