大家下午好
我被分配了一个编程问题,在该问题中,我需要采用具有多个元素的单个数组,并配置一个新数组。
新数组将由前两个元素的总和组成,然后由后两个元素的总和组成,依此类推。
如果原始数组的元素数为奇数,则最后一个值将保持不变,且总和值在前。
public static int[] collapse(int[] old) {
int[] nNew = new int[old.length];
if(old.length%2 == 0){
nNew = new int[old.length/2];
for(int i =0; i<nNew.length; i+=2) {
int temp = old[i] + old[i+1];
nNew[i] = temp;
}
}
//i tried to for loop to increment by 1 here, but it didn't work out.
//I believe this is where my problem is.
if(old.length%2 != 0) {
nNew = new int[(old.length/2) +1];
for(int i =0; i<nNew.length-1; i++) {
//I can't get an Odd number of array elements to increment by 2
int temp = old[i] + old[i+1];
nNew[i] = temp;
nNew[nNew.length-1] = old[old.length-1];
}
}
return nNew;
}
调用示例包括:
collapse({7, 2, 8, 9, 4, 13, 7, 1, 9, 10})
expected: {9, 17, 17, 8, 19}
my result: {9, 0, 17, 0, 17}
collapse({1, 2, 3, 4, 5})
expected: {3, 7, 5}
my result: {3, 5, 5}
无需单独的循环。只需在同一循环中检查:
public static int[] collapse(int[] old) {
int[] nNew = new int[(old.length + 1) / 2];
for (int i = 0; i < old.length; i += 2) {
nNew[i / 2] = old[i];
if (i + 1 < old.length) {
nNew[i / 2] += old[i + 1];
}
}
return nNew;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句