java Codingbat notAlone—;为什么';这对这个具体的例子不起作用吗
如果数组中的元素前后都有值,并且这些值与数组中的元素不同,那么我们可以说数组中的元素是“单独的”。返回给定数组的一个版本,其中给定值的每个单独实例都被其左侧或右侧较大的值替换 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]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
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
假设ifnums[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];