该问题要求编写静态方法sumNeighbours,该方法将整数数组作为参数,并返回与原始数组具有相同元素数的数组,以使新数组中的每个整数都是其邻居及其自身的和在原始数组中。
例如
[10, 20, 30, 40]
将是
[30, 60, 90, 70]
30(10+20) 60(20+10+30) 90(30+20+40) 70(40+30)
谢谢。这是我已经完成的代码,并且可以正常工作,但仅适用于某些情况,而不适用于所有情况。谁能推荐一种更有效的方法来解决这个问题?在某些情况下,无需对所有if和else进行硬编码。
public static int[] sumNeighbours(int[] values) {
int[] list = new int[values.length];
for (int i=0; i<values.length; i++) {
if (values.length > 1) {
if (values[i] == values[0]) {
list[i] = values[i] + values[i+1];
}
else if (values[i] == values[values.length-1]) {
list[i] = values[i] + values[i-1];
}
else {
list[i] = values[i] + values[i-1] + values[i+1];
}
}
else {
list [i] = values[i];
}
}
return list;
}
答案 0 :(得分:0)
首先:您的输入内容可能为null,因此请先进行null检查,然后在这种情况下我想返回null。
第二:在创建相同大小的数组之后,您需要迭代输入,并对每个索引检查两件事:
完成了吗?
答案 1 :(得分:0)
不要使用值来检查元素是否为首末尾,使用索引以及是否进行nullptr检查。对于诸如[30,30,30]
public static int[] sumNeighbours(int[] values) {
if (null == values)
return null;
int[] list = new int[values.length];
for (int i=0; i<values.length; i++) {
if (values.length > 1) {
if (i == 0) {
list[i] = values[i] + values[i+1];
}
else if (i == values.length-1) {
list[i] = values[i] + values[i-1];
}
else {
list[i] = values[i] + values[i-1] + values[i+1];
}
}
else {
list [i] = values[i];
}
}
return list;
}
答案 2 :(得分:0)
这是我已经完成的代码,并且可以正常工作,但仅适用于某些情况,并非全部
可能是因为您比较值而不是索引:if (values[i] == values[0])
必须为if (i == 0)
,而if (values[i] == values[values.length-1])
必须为if (i == values.length - 1)
。
具有较少代码和空检查的代码段可能如下所示
public static int[] sumNeighbours(int[] input) {
if (input == null) {
return null;
}
int[] result = new int[input.length];
for (int i = 0; i < input.length; i++) {
int sum = input[i];
if (i > 0) {
sum += input[i - 1];
}
if (i < (input.length - 1)) {
sum += input[i + 1];
}
result[i] = sum;
}
return result;
}
答案 3 :(得分:0)
如果在循环中删除if块,则可以提高效率:
public static int[] sumNeighbours(final int[] values) {
if (null == values || 2 > values.length) {
return values;
}
final int len = values.length;
final int[] list = new int[len];
list[0] = values[0] + values[1];
list[len - 1] = values[len - 2] + values[len - 1];
for (int i = 1; i < len - 2; i++) {
list[i] = values[i - 1] + values[i] + values[i + 1];
}
return list;
}
您不需要在边缘添加3个数字。
答案 4 :(得分:0)
签出,
public static int[] sumNeighbours(int[] values) {
int[] list = new int[(values.length)];
for (int i=0; i<values.length; i++) {
if (values.length > 1) { //To Check if there are more than one values
if(i==0) //It will check if it is first element
{
list[i]=values[i]+values[i+1]; //Add First value and second value to place it in first location. As first location has only one Neighbor
}
else if (i==(values.length-1)) //TO check If its last value
{
list[i]=values[i]+values[i-1]; //As Last Location has only one Neighbor
}
else
{
list[i]=values[i]+values[i-1]+values[i+1]; //For All intermediate locations
}
}
}
return list;
}