已知 20 170 30 80 60 129 49 N 个数字 写一段代码,将这 N 个数字分为 N 组, 逻辑是数字相加需小于等于 200 , 例如 20+170=190 小于 200 即算 1 组, 20+170+30=220 大于 200 时 30 另算一组
java 有哪些优雅有的实现方式呢?
1
aahao 2023-05-12 11:15:14 +08:00
来自 ChatGPT:
在 Java 中,可以使用不同的方式实现将一组数字分组的逻辑。以下是一种可能的优雅实现方式: import java.util.ArrayList; import java.util.List; public class NumberGrouping { public static void main(String[] args) { int[] numbers = {20, 170, 30, 80, 60, 129, 49}; // 输入的数字数组 List<List<Integer>> groups = groupNumbers(numbers); // 分组后的结果 // 打印每个分组 for (int i = 0; i < groups.size(); i++) { System.out.println("Group " + (i + 1) + ": " + groups.get(i)); } } public static List<List<Integer>> groupNumbers(int[] numbers) { List<List<Integer>> groups = new ArrayList<>(); List<Integer> currentGroup = new ArrayList<>(); int sum = 0; for (int number : numbers) { if (sum + number <= 200) { // 将数字添加到当前分组 currentGroup.add(number); sum += number; } else { // 当前分组已满,添加到结果中,并创建新的分组 groups.add(currentGroup); currentGroup = new ArrayList<>(); currentGroup.add(number); sum = number; } } // 添加最后一个分组 groups.add(currentGroup); return groups; } } 这个代码示例中,我们首先定义了一个 groupNumbers 方法,它接受一个整数数组作为输入,并返回一个包含分组结果的二维列表。然后,在 main 方法中,我们声明了一个示例数字数组,并调用 groupNumbers 方法来获取分组结果。 在 groupNumbers 方法中,我们使用了两个列表:groups 用于存储最终的分组结果,currentGroup 用于临时存储当前正在构建的分组。我们还使用了一个变量 sum 来跟踪当前分组中数字的总和。 我们遍历输入的数字数组,并根据数字的总和是否超过 200 来判断是否需要创建新的分组。如果总和未超过 200 ,则将数字添加到当前分组,并更新总和;否则,将当前分组添加到结果列表中,然后创建一个新的分组,将当前数字添加到新的分组中,并更新总和。 最后,我们将最后一个分组添加到结果列表中,并返回最终的分组结果。 这种实现方式简洁明了,并且逻辑清晰,可以满足将一组数字按照总和不超过 200 的条件进行分组的要求。 |
2
vcbal 2023-05-12 11:19:19 +08:00 1
你这个不是经典算法题 爬楼梯吗。。。
|
3
optional 2023-05-12 11:22:56 +08:00 via iPhone
你这是不是少了优化目标,比如分组数量最少,分组均方差最小之类的
|
4
siweipancc 2023-05-12 12:22:36 +08:00 via iPhone
啊这……真有这么简单的需求吗?还是说无序访问?所有可能分组模式?
|
6
tanghongkai 2023-05-12 14:52:28 +08:00
@jonyj 盲猜全文复制直接问的,可以看看你提问 chatgpt 的内容吗
|
7
JasonLaw 2023-05-12 14:58:43 +08:00 via iPhone
你这个问题就有问题,你说“ 将这 N 个数字分为 N 组”,这个明显不对。然后怎么才算一组,是不是组的总和要尽量大?组的数量是不是要尽量少。
BTW ,要先理解问题,才能解决问题。 |
8
JasonLaw 2023-05-12 17:37:18 +08:00 via iPhone
@vcbal #2 爬楼梯是什么题?可以给一下 LeetCode 链接吗?这个 https://leetcode.com/problems/climbing-stairs/ ?
|