LeetCode 题解工作台

分组的最大数量

给你一个正整数数组 grades ,表示大学中一些学生的成绩。你打算将 所有 学生分为一些 有序 的非空分组,其中分组间的顺序满足以下全部条件: 第 i 个分组中的学生总成绩 小于 第 (i + 1) 个分组中的学生总成绩,对所有组均成立(除了最后一组)。 第 i 个分组中的学生总数 小于 第 (i…

category

4

题型

code_blocks

6

代码语言

hub

3

相关题

当前训练重点

中等 · 二分·搜索·答案·空间

bolt

答案摘要

我们观察题目中的条件,第 组的学生人数要小于第 组的学生人数,且第 组的学生总成绩要小于第 组的学生总成绩,我们只需要将学生按照成绩从小到大排序,然后每一组依次分配 , , ..., 个学生即可。如果最后一组的学生人数不足 个,那么我们可以将这些学生分配到前面的最后一组中。 因此,我们要找到最大的 ,使得 $\frac{(1 + k) \times k}{2} \leq n$,其中 …

Interview AiBox logo

Interview AiBox 实时 AI 助手,陪你讲清 二分·搜索·答案·空间 题型思路

试试 AiBox 面试助手arrow_forward
description

题目描述

给你一个正整数数组 grades ,表示大学中一些学生的成绩。你打算将 所有 学生分为一些 有序 的非空分组,其中分组间的顺序满足以下全部条件:

  • i 个分组中的学生总成绩 小于(i + 1) 个分组中的学生总成绩,对所有组均成立(除了最后一组)。
  • i 个分组中的学生总数 小于(i + 1) 个分组中的学生总数,对所有组均成立(除了最后一组)。

返回可以形成的 最大 组数。

 

示例 1:

输入:grades = [10,6,12,7,3,5]
输出:3
解释:下面是形成 3 个分组的一种可行方法:
- 第 1 个分组的学生成绩为 grades = [12] ,总成绩:12 ,学生数:1
- 第 2 个分组的学生成绩为 grades = [6,7] ,总成绩:6 + 7 = 13 ,学生数:2
- 第 3 个分组的学生成绩为 grades = [10,3,5] ,总成绩:10 + 3 + 5 = 18 ,学生数:3 
可以证明无法形成超过 3 个分组。

示例 2:

输入:grades = [8,8]
输出:1
解释:只能形成 1 个分组,因为如果要形成 2 个分组的话,会导致每个分组中的学生数目相等。

 

提示:

  • 1 <= grades.length <= 105
  • 1 <= grades[i] <= 105
lightbulb

解题思路

方法一:贪心 + 二分查找

我们观察题目中的条件,第 ii 组的学生人数要小于第 i+1i+1 组的学生人数,且第 ii 组的学生总成绩要小于第 i+1i+1 组的学生总成绩,我们只需要将学生按照成绩从小到大排序,然后每一组依次分配 11, 22, ..., kk 个学生即可。如果最后一组的学生人数不足 kk 个,那么我们可以将这些学生分配到前面的最后一组中。

因此,我们要找到最大的 kk,使得 (1+k)×k2n\frac{(1 + k) \times k}{2} \leq n,其中 nn 为学生的总人数。我们可以使用二分查找来求解。

我们定义二分查找的左边界为 l=1l = 1,右边界为 r=nr = n,每一次二分查找的中点为 mid=l+r+12mid = \lfloor \frac{l + r + 1}{2} \rfloor,如果 (1+mid)×mid>2×n(1 + mid) \times mid \gt 2 \times n,则说明 midmid 太大,我们需要将右边界缩小至 mid1mid - 1,否则我们需要将左边界增大至 midmid

最后,我们将 ll 作为答案返回即可。

时间复杂度 O(logn)O(\log n),空间复杂度 O(1)O(1)。其中 nn 为学生的总人数。

1
2
3
4
5
class Solution:
    def maximumGroups(self, grades: List[int]) -> int:
        n = len(grades)
        return bisect_right(range(n + 1), n * 2, key=lambda x: x * x + x) - 1
speed

复杂度分析

指标
时间complexity is O(n log n + log n * n) due to sorting and binary search checks over group counts. Space complexity is O(1) beyond input storage, as the validation uses constant extra space.
空间Depends on the final approach
psychology

面试官常问的追问

外企场景
  • question_mark

    Sorting grades can simplify grouping checks.

  • question_mark

    Binary search may hint at optimizing the number of groups.

  • question_mark

    Tracking cumulative group sizes ensures valid non-decreasing sequences.

warning

常见陷阱

外企场景
  • error

    Failing to sort grades first increases complexity and may miss valid groupings.

  • error

    Not enforcing that each group has more students than the previous group leads to incorrect counts.

  • error

    Checking only sums without tracking group sizes can produce invalid configurations.

swap_horiz

进阶变体

外企场景
  • arrow_right_alt

    Limit group sum differences to a maximum value.

  • arrow_right_alt

    Allow only contiguous student sequences for groups.

  • arrow_right_alt

    Change constraints so each group must have strictly increasing sum by at least a fixed delta.

help

常见问题

外企场景

分组的最大数量题解:二分·搜索·答案·空间 | LeetCode #2358 中等