计算机导论 (2021年秋) 编程练习

B. 分发糖果

单点时限: 2.0 sec

内存限制: 512 MB

圣诞节要到了, 假设你是一位很棒的老师, 想要给你的学生们发一些糖果. 但是, 每个学生最多只能给一袋糖果.

对每个学生 i, 都有一个胃口值 g[i], 这是能让学生们满足胃口的糖果的最少个数; 并且每袋糖果 j, 都有一个数量 s[j]. 如果 s[j] >= g[i], 我们可以将这袋糖果 j 分配给学生 i , 这个学生会得到满足. 你的目标是尽可能满足最多的学生, 并输出这个最大数值.

示例 1:

输入: g = [1,2,3], s = [1,1]

输出: 1

解释:你有三个学生和两袋糖果, 3个学生的胃口值分别是: 1, 2, 3.
虽然你有两袋小糖果, 由于它们的糖果个数都是1, 你只能让胃口值是1的学生满足, 也就是只能满足学生[0].
所以你应该输出1.

示例 2:

输入: g = [1, 2], s = [1, 2, 3]

输出: 2

解释:你有两个学生和三袋小糖果, 2个学生的胃口值分别是1, 2.
你拥有的糖果袋数和数量都足以让所有学生满足.
所以你应该输出2.

样例

Input
[1,2,3]
[1,1]
Output
1
Input
[1,2]
[1,2,3]
Output
2

提示

  • 使用arr.sort()可对列表arr进行由小到大的排序
  • 你应该使用贪心的思想: 用尽量少的那一袋糖果去满足胃口小的孩子

输入输出处理已为你准备好, 请书写函数体部分以完成作答.

def assignCandy(g, s) -> int:
    # finish the function.

    return count

g = [int(x) for x in input().strip('[]').split(',') if x] 
s = [int(x) for x in input().strip('[]').split(',') if x] 
print(assignCandy(g, s))

题目来源: leetcode