【问题标题】:Split array based on sum of the values of each element [closed]根据每个元素的值之和拆分数组[关闭]
【发布时间】:2012-09-27 00:29:39
【问题描述】:

假设输入数组的元素按升序排列,如下例所示:

int[] a= {23,24,25,30,34,36,40,41,43,45,50};

我需要将数组拆分为不同的子数组。每个子数组将包含元素之和小于或等于 100。

对于上述输入,我的输出应该是:

b1[]= {23,24,25};

b2[]= {30,34,36};

b3[]= {40,41};

b4[]= {43,45};

b5[]= {50};

输入数组中元素的值和数量可能会有所不同。

我对 Java 很陌生,完全被卡住了。请为我提出一个继续的方法。

【问题讨论】:

  • 你试过什么?如果您首先尝试然后发布您遇到的特定问题以及无效的代码,您往往会得到更好的回答。
  • 这涉及到循环和求和,你尝试过吗?
  • @JustinKSU:请注意,作业标签现在是officially deprecated,不应再添加到问题中
  • 在一个循环中,继续对每个元素求和并检查其值,如果是
  • 您能用英语(或您的母语)描述如何解决这个问题吗?试着用笔和纸写出来。

标签: java arrays split sub-array


【解决方案1】:

如果数字的顺序很重要,你可以这样写(这段代码只是打印太阳数组)

int sum = 0;
for(int i=0;i<a.length;i++){
   if(sum + a[i] <= 100){
       sum += a[i];
       System.out.print(a[i]+" ");
   }else{
       sum = 0;
       System.out.println("");
   }
}

【讨论】:

    【解决方案2】:

    我将为您提供一些有关如何执行此操作的想法,并将编码留给您。如果您对实现的特定部分有疑问,请随时提出。

    您必须在这里做的第一件事是创建一个存储子数组的地方。由于您不知道最终会得到多少个子数组,因此像 List 这样的动态将是一个不错的选择,但如果您还没有了解这些,那么大数组也可以完成这项工作.

    大数组应该有多长?嗯,每个子数组都小于 100,对吧?您可以将输入中的所有元素相加并除以 100 得到估计值。

    完成初始设置后,您需要弄清楚如何将输入数组拆分为子数组。你知道子数组的规则是“小于 100”,所以你必须做一些加法。

    一一查看输入元素。它们中的每一个都必须以一个子数组结尾;唯一的问题是何时停止一个子阵列并开始下一个子阵列。因此,如果添加下一个输入数字会使您的子数组总数超过 100,请将当前子数组存储在大数组中,并将该输入放入一个全新的子数组中。

    当然,将之前添加的一堆数字相加是浪费时间。您可以在旁边保留一个单独的变量来存储当前子数组的总数,这样您就不必为每个输入添加当前子数组上的所有元素。请记住在创建新子数组时将该变量重新设置为 0!

    最后,您可能会用完子数组或大数组中的空间。如果发生这种情况,只需创建一个两倍大的新值并将当前值复制进去。

    【讨论】:

    • 我想不出一种方法来利用输入按升序排序的事实。我有兴趣看到这样的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 2014-12-19
    • 2019-04-13
    相关资源
    最近更新 更多