列表的相等部分的限制,最后部分全部超出

limits of equal portions of a list with last portion getting all excess

我正在寻找划分给定列表的最佳方法,例如包含 200 个数字的列表。
我想把它分成 3 个部分,所以我知道还有剩余部分。
这是我带来的,我相信有更好的方法:

int divider = 3;
int lastElements = this.mylist.size() % divider;
int listpart = this.mylist.size() / divider;
int listpartStart = 0;
int listpartEnd = listpart-1;
for(int i=0;i<divider;i++) {
  if(i==divider-1) {
      listpartEnd+=lastElements;
  }
   
  listpartEnd;
  listpartStart;

   
  someHandlingFunction(listpartStart,listpartEnd);
     
  listpartEnd+=listpart;
  listpartStart+=listpart;
}

提出这一要求的简明实施的关键是认识到最后一部分,即应该获得多余部分的部分,是一种特殊情况。所以,循环divisor-1次,最后单独处理最后的部分。

void split(int size, int divider)
{
    int part = size / divider;
    for(int i=1; i<divider; i++)
    {
        someHandlingFunction((i-1)*part, (i*part)-1);
    }
    someHandlingFunction((divider-1)*part, size-1);
}

void someHandlingFunction(int start, int end) 
{
    System.out.println(start + " - " + end);
}

注意 - 您可能需要为 size < divider 的情况添加检查并适当处理它。

测试:

split(200, 3);

输出:

0 - 65
66 - 131
132 - 199