社区常称:MVP争夺战
通过率 47% · 提交 465 · 通过 220
小慕正在组织一场项目成果展示赛,目标是让尽可能多的团队成员获得“最佳贡献奖”。该奖项的评选标准是单场最高得分获得者,且允许并列。 因此,小慕决定在展示过程中尽量让更多成员上场,并且让所有有得分的成员得分完全相同。然而,展示的每一分钟,得分只能由某一位成员独自获得。
这类题属于华为 OD 机考真题方向中「100分 / 2024E」方向的高频题型,通常考察对「100分 / 2024E」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
输入第一行为一个数字 t ,表示为有得分的分钟数
输出有得分的队员都是 MVP 时,最少得 MVP 得分。
示例 1
输入示例
9 5 2 1 5 2 1 5 2 1
输出示例
6
一共 4 人得分,分别都是 6 分 5 + 1 , 5 + 1 , 5 + 1 , 2 + 2 + 2
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
本题和 经典题型(划分 K 个相等的子集,回溯解法)几乎是同一个题目。
强烈建议先看一下上一个题目的详细解法。
在本题中,题目并不是直接给一个 k 让我们判断是否能够将所有数字 nums 分配到 k 个桶中,而是让我们找到这个 k 并且计算出每个桶的和 per 作为答案。
所以我们仅需做一点细微的修改:从数组长度 n 开始逆序遍历 k,对于每一个 k 都去计算这个 k 能否满足条件。一旦找到这个 k 是满足题目要求的条件,说明找到了一个最大的 k,与之对应的 per 也就是能够找到的最小的 per。
另外,由于子问题本身并不具备二段性(比如说,可能存在 k=2 和 k=4 可以满足条件,但是 k=3 并不满足条件的情况),所以本题关于 k 的寻找,不适合使用二分查找来完成。
思路展开
复杂度分析 设 n 为得分的个数。对固定的 k,dfs 最坏情况下要为 n 个数各尝试 k 个桶,时间为 O(k^n);等和桶剪枝、per 上限剪枝与逆序排序会大幅压缩实际分支,但最坏复杂度仍是指数级。外层还要对 k 从 n 到 1 逐个尝试,以最大的 k = n 计,最坏总时间为 O(n · n^n) 量级。空间上,桶数组 group 占 O(k),递归深度最多为 n,总辅助空间 O(n + k);开头的排序 O(n log n) 相比之下可忽略。
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。