我无法解决问题。如何找到每行的第一个负数与最后一个之间的元素的总和?我是针对一维数组完成的,但无法针对二维数组进行重写。对于二维数组,我总是有一个答案0
。
这是一个示例,在一维数组[-1, 2, 3, -4]
中,答案是5
或[-1, 2, 3, -4, 5]
答案是5
(如果我们有[1, -2, 3, -4]
答案是{{1 }}。二维数组中应该相同。怎么解决呢?请帮助我。
这是一个代码
3
答案 0 :(得分:2)
怎么样?
static int negSum(int[] a)
{
int sum = 0;
for(int i=0; i<a.length; i++)
{
if(a[i] < 0)
{
for(int j=i+1; j<a.length && a[j]>=0; j++)
sum += a[j];
break;
}
}
return sum;
}
如果数组仅包含一个负数,则求和到数组末尾。如果要在这种情况下返回0,只需检查j == a.length
之前是否在break
之前,然后将sum
设置为0。
测试:
public static void main(String[] args)
{
int tests[][] = new int[][] {
{-1, 2, 3, -4},
{-3, 5, 6, 8},
{9, 2, 3, -1},
{-1, 2, 3, -4, 5},
{1, -2, 3, -4},
};
for(int[] test : tests)
System.out.printf("%s : % d\n",Arrays.toString(test), negSum(test));
}
输出:
[-1, 2, 3, -4] : 5
[-3, 5, 6, 8] : 19
[9, 2, 3, -1] : 0
[-1, 2, 3, -4, 5] : 5
[1, -2, 3, -4] : 3
答案 1 :(得分:1)
您绝对应该拆分功能。
只需使用一个函数即可计算数组的总和。 然后计算二维数组中的每个和:
public void calculateSum() {
int a[][] = new int[][] { { -1, 2, 3, -4 }, { -3, 5, 6, -8 }, { -9, 2, 3, -1 }, { -7, 2, 3, -9 }};
int sums[] = new int[a.length];
for (int i = 0; i < a.length; i++) {
sums[i] = getSumBetweenNegatives(a[i]);
System.out.println(sums[i]);
}
}
public int getSumBetweenNegatives(int[] a) {
int sum = 0;
int indexFirstNegative = -1;
int indexSecondNegative = -1;
for (int i = 0; i < a.length; i++) {
if (a[i] < 0 && indexFirstNegative == -1) {
indexFirstNegative = i;
}
else if (a[i] < 0) {
indexSecondNegative = i;
break;
}
}
// maybe check if two negatives were found
for (int i = indexFirstNegative + 1; i < indexSecondNegative; i++) {
sum += a[i];
}
return sum;
}
如果您需要二维数组的完整和,只需将结果再加起来