java Codingbat notAlone —为什么它不适用于此特定示例

时间:2018-11-24 15:43:51

标签: java arrays loops for-loop if-statement

  

我们将说,如果数组中的元素前后都有值,并且这些值与该元素不同,则它是“独立的”。返回给定数组的版本,其中,给定值的每个实例(单独存在)将被其左侧或右侧的较大值替换。

     

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

     

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

     

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

template<>
class X<A>
{
    int a;
    int b;
    X<A> & operator = (const X<B> & obj);
};

template<>
class X<B>
{
    ...
};

X<A> & X<A>::operator = (const X<B> & obj)
{
     a = obj.a;
     b = obj.b;
}

当我在codingbat上运行它时,它适用于所有示例,除此之外: notAlone([1、2、3、2、5、2],2)应该返回[1、3、3、5、5、2],但是我的返回[1、3、3、3、5、2 ]。

我真的坚持如何解决这个问题,因为在我看来,我写的内容也应适用于该特定示例,但显然不是。我的错误来自哪里?我应该如何重新编写代码?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

您已经使它复杂化了。如果应替换当前元素,则只需查找上一个和下一个元素的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;
}

顺便说一句,在您的解决方案中,您忽略了给定值(val

  

返回给定数组的版本,其中替换给定值的每个实例 的单个实例...

但这不是在给定情况下代码失败的原因。您只是找不到正确的最大值:

k==3时:

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];

如果将这5行替换为:

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

您将获得正确的输出。