在2d数组java

时间:2017-11-30 19:06:06

标签: java multidimensional-array

我无法解决如何实现以int [] []输入开头的方法以及返回int [] []输出的预定义sum值,该输出仅显示行中的相邻值加起来总和。例如,如果输入数组是

int[][] input = new int[][]{
{3,4,4,2,7},
{2,3,2,8,6},
{1,4,2,1,2}
}

当sum设置为7时,它将产生一个具有以下值的输出数组

{3,4,0,0,7},
{2,3,2,0,0},
{1,4,2,1,0}
}

输出数组应该只显示与其邻居相加的设定数字(7)的值,或者如果它是0-9值的数字是所需的总和(当搜索7时它显示所有7) 。为了进一步说明,正如你在输出数组中看到的那样,它显示前两个值3和4,因为它们加到7.它显示2,3,2因为它们也加到7.它打印出1,4 ,2,1在底部,因为1,4,2添加到7和4,2,1添加到7.总而言之,它只显示7或最多7的值,旁边有数字,否则显示0.此外,输入值必须为< 0。

头脑风暴一段时间之后,我知道代码需要一些嵌套循环:一个循环遍历行,在一个循环中循环通过列,在循环内部更新总和,当总和时停止等于预设和(本例中为7),最后是循环以更新输出[] []。但是,我在编写能够正确实现所有这些循环的代码时遇到了很多麻烦。我打算用垂直相加的数字做同样的事情,但是现在想要专注于横向。

2 个答案:

答案 0 :(得分:0)

您需要三个嵌套循环。或者实际上,三层嵌套循环在最里面的层次上有两个循环,但我最后会回到那个。

在任何循环之前,创建结果数组的主干。如果它是此时对数组的空引用数组,则没关系。

外循环:循环通过外部数组。经典for循环是一种选择。对于每个条目,在结果中创建一个正确长度的内部数组,填充零作为开始。

中间循环,遍历内部数组中的条目。再一次经典的for循环很好。您的目标是每次迭代将确定是否在此条目处开始一系列具有和7的相邻值,如果是,则查明它有多长,并将有问题的条目复制到结果数组中。

内部循环(第一个内部循环,即)用于添加相邻条目以查明总和是否为7.从中间循环的条目开始并将值相加。这个循环有一个双停止条件:当总和为7或更大时停止(假设所有值都是正数),但显然你也在到达内部数组的末尾时停止。一个while循环将符合我的口味。只有当总和恰好达到7时,您是否使用新的内部循环将值复制到结果中。

快乐的编码。

PS如果你认为所有的值都是正数,你不应该假设,你应该检查。在中间循环中,如果该条目中的值为0或负数,则抛出IllegalArgumentException

答案 1 :(得分:0)

这可以在O(NxM)复杂度中完成。

对于每一行,您保留两个索引(例如,iLow和iHigh初始化为第一项input [i] [0])和sumSoFar变量。在每次迭代时,如果sumSoFar< 7你增加iHigh。如果是> 7然后你增加iLow和iHigh。如果它是== 7那么你找到了一个组合+增量iLow和iHigh。

这应该给出算法的高级概念,我确信很多细节都缺失/不完整但你应该能够把它放在代码中。