java Codingbat notAlone—;为什么';这对这个具体的例子不起作用吗

java Codingbat notAlone—;为什么';这对这个具体的例子不起作用吗,java,arrays,loops,for-loop,if-statement,Java,Arrays,Loops,For Loop,If Statement,如果数组中的元素前后都有值,并且这些值与数组中的元素不同,那么我们可以说数组中的元素是“单独的”。返回给定数组的一个版本,其中给定值的每个单独实例都被其左侧或右侧较大的值替换 notAlone([1,2,3],2)→ [1,3,3] notAlone([1,2,3,2,5,2,2],2)→ [1,3,3,5,5,2] notAlone([3,4],3)→ [3,4] public int[]notAlone(int[]nums,int val){ 对于(int k=1;knums[k]) max

如果数组中的元素前后都有值,并且这些值与数组中的元素不同,那么我们可以说数组中的元素是“单独的”。返回给定数组的一个版本,其中给定值的每个单独实例都被其左侧或右侧较大的值替换

notAlone([1,2,3],2)→ [1,3,3]

notAlone([1,2,3,2,5,2,2],2)→ [1,3,3,5,5,2]

notAlone([3,4],3)→ [3,4]

public int[]notAlone(int[]nums,int val){
对于(int k=1;knums[k])
max=nums[k-1];
else if(nums[k+1]>nums[k])
max=nums[k+1];
if(nums[k-1]!=nums[k]&&nums[k]!=nums[k+1])
nums[k]=最大值;
}
}
返回nums;
}
当我在codingbat上运行此功能时,它适用于除以下示例之外的所有示例: notAlone([1,2,3,2,5,2],2)应该返回[1,3,3,5,5,2],但是我的返回[1,3,3,3,5,2]


我真的被困在如何解决这个问题上,因为在我看来,我所写的应该也适用于这个特定的例子,但显然它不适用。我的错误来自哪里?我应该如何重新编写代码?任何帮助都将不胜感激

你把事情复杂化了。如果要替换当前元素,则只需查找上一个和下一个元素的
max

public static int[] notAlone(int[] nums, int val) {
    for(int k = 1 ; k<nums.length - 1; k++)
    {
        if(nums[k]==val && nums[k-1] != nums[k] && nums[k] != nums[k+1])
            nums[k] = Math.max (nums[k-1], nums[k+1]);
    }
    return nums;
}
如果将这5行替换为:

int max = nums[k-1];
if(nums[k+1] > max)
    max = nums[k+1];

您将获得正确的输出。

nums[k+1]>nums[k]
nums[k-1]>nums[k]
。您假设
nums[k]
是当前最大的数字。将它们相应地更改为
nums[k+1]>max
nums[k-1]>max
。您编写了
if-else if
假设if
nums[k-1]>max
true,则
nums[k+1]>max
不能为
true
。删除
else
,如果
s,则将其更改为两个
int max = nums[k]; // max = 2
if(nums[k-1]>nums[k]) // 3 > 2
    max = nums[k-1]; // max = 3
else if(nums[k+1] > nums[k]) // no evaluated. therefore you change num[3] to 3 instead of to 5
    max = nums[k+1];
int max = nums[k-1];
if(nums[k+1] > max)
    max = nums[k+1];