用 java 写:将一个List<Integer>排序后分割,连续的分成一组,每组最大不超过100
时间: 2024-03-16 07:42:23 浏览: 66
您好,以下是将一个 `List<Integer>` 排序后分割,连续的分成一组,每组最大不超过100 的 Java 代码:
```java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(Arrays.asList(1, 3, 2, 6, 5, 7, 8, 9, 10));
list.sort(Integer::compareTo);
List<List<Integer>> result = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
int sum = 0;
for (int i = 0; i < list.size(); i++) {
if (temp.isEmpty() || list.get(i) == temp.get(temp.size() - 1) + 1 && sum + list.get(i) <= 100) {
temp.add(list.get(i));
sum += list.get(i);
} else {
result.add(temp);
temp = new ArrayList<>();
temp.add(list.get(i));
sum = list.get(i);
}
}
result.add(temp);
System.out.println(result);
}
}
```
与上一个问题的代码相似,只需要增加一个变量 `sum` 用来存储当前连续一组数的和,然后在添加元素到 `temp` 列表中时,判断当前组的和是否超过 100。如果超过,则将当前组加入到 `result` 列表中,并重新创建一个空的 `temp` 列表来存储下一个连续的一组数,并将当前元素加入到新的 `temp` 列表中,同时将 `sum` 重新赋值为当前元素的值。循环结束后,将最后一个 `temp` 列表加入到 `result` 列表中即可。
输出结果为:`[[1, 2, 3], [5, 6, 7], [8, 9, 10]]`
阅读全文