- JY:将题目分配给指定人数时,至少会分配多少种类型题
- 2、完成一半题目【S】 · 语雀
1、字典统计 + 排序 + 贪心分配
- 解题思路:使用字典统计每个题目的数量,然后基于题目数量倒序排序,并优先分配数量最多的类型题,直到所有人均能分配到为止。
class Solution:
def halfQuestions(self, questions: List[int]) -> int:
from collections import Counter
# jy: 统计各个问题类型的数量
dict_q_count = Counter(questions)
# jy: 计算人数
p_num = len(questions) // 2
# jy: 基于问题类型的数量进行排序
ls_ = [[num, type_] for type_, num in dict_q_count.items()]
ls_sorted = sorted(ls_, reverse=True)
# jy: 统计至少包含多少种知识类型
res_ = 1
# jy: 统计知识类型数分配给多少人
sum_ = 0
for ls_i in ls_sorted:
sum_ += ls_i[0]
# jy: 如果当前知识点类型的数量分配了之后总人数还小于 p_num, 则
# 表明还需要使用下一种知识类型来分配给剩余的人
if sum_ < p_num:
res_ += 1
else:
break
return res_
2、改写解法 1
class Solution:
def halfQuestions(self, questions: List[int]) -> int:
n = len(questions) // 2
num_freq = sorted(collections.Counter(questions).items(),
key = lambda x: x[1], reverse=True)
cnt = res = 0
for _, freq in num_freq:
if cnt < n:
cnt += freq
res += 1
return res
此处为语雀内容卡片,点击链接查看:融码一生 · 语雀