首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将列表划分为组的算法

将列表划分为组的算法
EN

Stack Overflow用户
提问于 2012-01-12 22:29:35
回答 3查看 3.1K关注 0票数 4

我有一个名单。

我想将此列表划分为指定大小的组。所有组都应等于或小于指定的大小,组中的组大小应尽可能相等,并应尽可能接近指定的大小。

什么算法(如果可能,请使用Java风格的伪代码!)确定最合适的组大小?

例如:

列表包含13个名称-最大团队规模为3。输出(团队规模):3,3,3,2,2

列表包含13个名称-最大团队大小为4。输出: 4,3,3,3

列表包含31个名称-最大团队规模为5。输出: 5,5,5,4,4,4,4

列表包含31个名字-最大团队规模为6。输出: 6,5,5,5,5,5

列表包含31个名称-最大团队规模为10。输出: 8,8,8,7

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-12 22:38:32

这很简单。您计算N div M的结果并添加1以获得正确的数组数量(N是列表长度,M是最大团队大小),然后对所有数组进行迭代以添加一个项,直到耗尽所有项

例如: 43个名字,最大团队编号4 => 43 mod 4+1= 11,仍然是3。所以11个数组(10个4和1个3)

票数 4
EN

Stack Overflow用户

发布于 2012-01-12 22:36:04

我不打算为此编写代码,但是

  1. 如果列表大小是最大团队大小的倍数,则除以团队大小以获得所有最大大小的组数,并将列表大小除以最大团队大小,然后添加1。这是列表大小从下一个更高的倍数开始的groups.
  2. Subtract的数量;这是比最大大小小一的团队的数量。

这显然只适用于接近工作的输入;如果最大团队规模与列表的大小相比很大,那么它就会失败。

票数 2
EN

Stack Overflow用户

发布于 2012-01-12 23:29:15

代码语言:javascript
复制
public class Q {
public static void q(int size, int maxTeamSize) {
    int numOfTeams = size / maxTeamSize;
    int mod = size % maxTeamSize;
    numOfTeams += (mod > 0) ? 1 : 0;
    System.out.print("\n(" + size + ":" + maxTeamSize + ")");
    for (int i = 0; i < numOfTeams; i++) {
        System.out.print(" " + (size / numOfTeams + ((i < mod) ? 1 : 0)));
    }
}

public static void main(String[] args) {
    q(13, 3);
    q(12, 4);
    q(31, 5);
    q(31, 6);
}
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8836710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档