You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据n和g_max动态计算最大允许分组大小g_new

等规模分组最大单组阈值计算方案

首先明确核心约束:将总数为n的元素划分为若干组,单组大小不能超过g_max,求可使用的最大分组上限g_new。

两种常见场景的解法

场景1:允许分组大小差值≤1(通用等规模分组)

该场景是业务中最常用的,允许相邻分组大小最多差1,不需要严格完全等分。

算法步骤:

  1. 计算最少需要的分组数:k = 向上取整(n / g_max),这一步是为了保证如果按g_max作为单组上限,不会出现超阈值的分组
  2. 用总元素数除以最少分组数再向上取整,得到最大可用分组阈值:g_new = 向上取整(n / k)

示例验证:

  • 题干示例:n=110,g_max=25
    1. k = ceil(110/25) = 5
    2. g_new = ceil(110/5) = 22,和示例结果完全一致
  • 非整除示例:n=111,g_max=25
    1. k = ceil(111/25) =5
    2. g_new = ceil(111/5)=23,最终可分为2组23、3组22,所有组均不超过25,是最大的可行阈值

代码实现(Python):

import math
def get_max_group_size(n: int, g_max: int) -> int:
    k = math.ceil(n / g_max)
    return math.ceil(n / k)

场景2:要求所有分组大小完全相等

该场景要求所有组的大小100%一致,没有差值。

算法逻辑:

g_new是n的最大正约数,且满足g_new ≤ g_max,可以从g_max倒序遍历到1,找到第一个能整除n的数值即为答案。

示例验证:

  • 题干示例:n=110,g_max=25,110的约数中≤25的最大值为22,符合要求

代码实现(Python):

def get_exact_equal_max_group(n: int, g_max: int) -> int:
    for g in range(g_max, 0, -1):
        if n % g == 0:
            return g
    return 1 # 边界兜底,1一定能整除所有正整数

内容的提问来源于stack exchange,提问作者sandeepsign

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:18:02