所以我想搜索索引总和为0的二维数组,然后打印出该数组索引中的一个元素。然后我想再次遍历数组,找到索引的和为1,然后打印出该数组索引中的一个元素,依此类推......
例如:
0 = array[0][0] = apple
1 = array[0][1] = banana
1 = array[1][0] = coffee
2 = array[2][0] = danish
2 = array[1][1] = eggs
2 = array[0][2] = fish
and so on
唯一的问题是我不知道如何绕过这个循环。这是一个家庭作业,所以我很感激如何解决这个问题。
请不要用勺子喂我的答案,我更喜欢小费或暗示以便学习。
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < numColumns; j++) {
sum = i + j;
System.out.println("sum: " + sum);
}
}
输出:
sum: 0
sum: 1
sum: 2
sum: 3
sum: 1
sum: 2
sum: 3
sum: 4
sum: 2
sum: 3
sum: 4
sum: 5
答案 0 :(得分:3)
我会给你一些提示。
提示#1:您不必遍历数组。
提示#2:您猜测的数字可以说3
。始终是可以添加以创建总和的最高数字。
3
是最高0
总是最小的。 提示#3:将此问题视为i
和j
之间的计算问题,然后访问数组。
如果您想要实际答案或更多提示,请告诉我:D
答案 1 :(得分:1)
首先循环显示sum
值,从0
到numRows + numColumns - 2
(最大可能索引的总和)。
在此循环中,使用i
循环遍历可能的行值。通过从j
中减去i
来计算列值sum
。
如果索引i
和j
有效,则访问该数组并打印该值。
答案 2 :(得分:0)
如果您不关心时间复杂性,可以使用if语句。
for(int k=0; k<MaxSum; k++) {
for (int i = 0; i < numRows; i++) {
for (int j = 0; j < numColumns; j++) {
sum = i + j;
if(sum == k) {
System.out.println("sum: " + sum);
}
}
}
}
答案 3 :(得分:0)
你可以在找到加起来一定数量的索引集可以在O(n)
中完成它,你甚至不需要遍历整个二维数组。O(n)
时间完成。但是,查找x
的所有可能值的所有索引将需要O(n^2)
。
让我们考虑一下你想做什么。我们可以首先观察维度A
的二维数组m x n
,你想找到所有i
和j
,总结为特别值x
只要x
小于或等于m + n - 2
(因为您可以访问的最高值为A[m - 1][n - 1]
,并且i < m
和j < n
。
现在想一想通过总结两个不同的值x
和i
来生成值j
的不同方法。 i
和j
可能带来哪些可能的值?例如,如果x
为7
,则i
可以是0
,j
可以是7
,反之亦然。您还可以i
为6
,j
为1
,反之亦然。想想你将如何生成一组这样的值。但是,您需要记住,您生成的所有这些对都无效。您有i
和j
需要适合数组维度的附加约束。