V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jonyj
V2EX  ›  Java

功能实现疑问

  •  
  •   jonyj · 2023-05-12 11:02:16 +08:00 · 1653 次点击
    这是一个创建于 596 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    BTW ,要先理解问题,才能解决问题。
    JasonLaw
        8
    JasonLaw  
       2023-05-12 17:37:18 +08:00 via iPhone
    @vcbal #2 爬楼梯是什么题?可以给一下 LeetCode 链接吗?这个 https://leetcode.com/problems/climbing-stairs/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2697 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:05 · PVG 12:05 · LAX 20:05 · JFK 23:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.