作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究一种方法,该方法将接受一个整数数组并将其对折 x 次。此方法将采用像 {1,2,3,4,5} 这样的整数数组,如果折叠一次则输出数组 {6,6,3}。或者它可以将输入 {5,6,7,8} 和输出 {13,13} 折叠一次。
如果输入被折叠两次,那么 {5,6,7,8} 将变成 {26}。
import java.util.Arrays;
public class Kata
{
public static int[] foldArray(int[] array, int runs)
{
int[] tempArray = array;
for(int j=0; j<runs; j++){
for(int i=0; i<tempArray.length; i++){
tempArray[i] += tempArray[tempArray.length - i];
}
}
int[] outputArray = Arrays.copyOfRange(tempArray, (tempArray.length/2));
return outputArray;
}
}
最佳答案
您的实现的问题在于您使用 tempArray
的方式:
int[] tempArray = array;
这将 tempArray
“别名”为原始 array
,因此对 tempArray
的任何修改也会发生在原始数组上。这意味着 tempArray
的 length
不会随运行而改变,因此第一次折叠之后的任何折叠都是无效的。
您需要在外循环的每次迭代中制作 tempArray
初始 ⌈n/2⌉ 元素的副本。要向上舍入一半长度,请使用以下表达式:
int halfLength = (tempArray.length+1)/2;
int[] tempArray = Arrays.copyOfRange(tempArray, halfLength);
这将处理奇数长度的数组。
在每次外部循环迭代结束时,将 array
替换为 tempArray
。
关于java - 将整数数组对折,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44463020/
我是一名优秀的程序员,十分优秀!