功能实现疑问

2023-05-12 11:02:16 +08:00
 jonyj

已知 20 170 30 80 60 129 49 N 个数字 写一段代码,将这 N 个数字分为 N 组, 逻辑是数字相加需小于等于 200 , 例如 20+170=190 小于 200 即算 1 组, 20+170+30=220 大于 200 时 30 另算一组

java 有哪些优雅有的实现方式呢?

1624 次点击
所在节点    Java
8 条回复
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 的条件进行分组的要求。
vcbal
2023-05-12 11:19:19 +08:00
你这个不是经典算法题 爬楼梯吗。。。
optional
2023-05-12 11:22:56 +08:00
你这是不是少了优化目标,比如分组数量最少,分组均方差最小之类的
siweipancc
2023-05-12 12:22:36 +08:00
啊这……真有这么简单的需求吗?还是说无序访问?所有可能分组模式?
jonyj
2023-05-12 13:42:44 +08:00
@aahao 能方便问下你是如何提问 chatgtp 的吗?我就没能得到想要的答案难道是我提问的方式有问题....
tanghongkai
2023-05-12 14:52:28 +08:00
@jonyj 盲猜全文复制直接问的,可以看看你提问 chatgpt 的内容吗
JasonLaw
2023-05-12 14:58:43 +08:00
你这个问题就有问题,你说“ 将这 N 个数字分为 N 组”,这个明显不对。然后怎么才算一组,是不是组的总和要尽量大?组的数量是不是要尽量少。

BTW ,要先理解问题,才能解决问题。
JasonLaw
2023-05-12 17:37:18 +08:00
@vcbal #2 爬楼梯是什么题?可以给一下 LeetCode 链接吗?这个 https://leetcode.com/problems/climbing-stairs/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/939433

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX