我有两个数组:
int [] array1 = {2, 4, 5};
int [] array2 = {1, 4, 6, 5, 2, 1};
我想添加这两个数组,我想要这个结果:
int [] result = {3, 8, 11, 5, 2, 1};
但是,数组结果的长度是多少?,array1.length或array2.length?
但是,我有一个家伙,如果我可以放大第一个数组:
int [] array1 = {2, 4, 5, 0, 0, 0};
抱歉我的英文不好,非常感谢你!
答案 0 :(得分:1)
public int[] addArrays(int[] a1, int[] a2) {
int[] result;
int[] smallPtr;
if (a1.length <= a2.length){
result = Arrays.copyOf(a2);
smallPtr = a1;
} else {
result = Arrays.copyOf(a1);
smallPtr = a2;
}
for (int i = 0; i < smallPtr.length; i++) {
result[i] += smallPtr[i];
}
return result;
}
for
循环是非常标准的代码,只是逐个添加数组的元素。 “神奇”发生在上面的if/else
声明中以及result
和smallPtr
;
result
足够自我解释,即将返回给客户端的结果数组。 smallPtr
是指向两个数组中较小者的“指针”。然后,if/else
块只是尝试确定哪个数组是最小的数组,并在制作较大数组的副本时将其设置为等于smallPtr
。然后我们只是简单地遍历小数组并将这些元素添加到大数组的副本中,为我们提供答案。
有多种方法可以解决这个问题。一种方法是在for if
中只有大量的loop
语句,这只是检查数组的边界条件以防止IndexOutOfBoundsException
。然而,这个解决方案试图通过只有一个if/else
块来使代码简洁(并且希望更容易阅读和理解)。
答案 1 :(得分:0)
我有两个数组:
int [] array1 = {2,4,5}; int [] array2 = {1,4,6,5,2,1};
我想添加这两个数组,我想要这个结果:
int [] result = {3,8,11,5,2,1};
这里面临的主要挑战是:
第一个挑战很容易解决为两个阵列长度中的最大值。解决第二个挑战只需要处理一个阵列中的元素在另一个阵列中没有合作伙伴的情况。这是一个解决方案:
public int[] addArrays(int[] array1, int[] array2) {
int maxLength = (array1.length > array2.length) ? array1.length : array2.length;
int index = 0;
int[] sums = new int[maxLength];
while (index < maxLength) {
sums[index] = (index < array1.length) ? array1[index] : 0;
sums[index] += (index < array2.length) ? array2[index] : 0;
index++;
}
return sums;
}
注意使用三元运算符如何使这个代码比块if-then语句更具可读性。