我们将说,如果数组中的元素前后都有值,并且这些值与该元素不同,则它是“独立的”。返回给定数组的版本,其中,给定值的每个实例(单独存在)将被其左侧或右侧的较大值替换。
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 ]。
我真的坚持如何解决这个问题,因为在我看来,我写的内容也应适用于该特定示例,但显然不是。我的错误来自哪里?我应该如何重新编写代码?任何帮助将不胜感激!
答案 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];
您将获得正确的输出。