java Codingbat notAlone——为啥它不适用于这个特定的例子
Posted
技术标签:
【中文标题】java Codingbat notAlone——为啥它不适用于这个特定的例子【英文标题】:java Codingbat notAlone — why doesn't it work for this specific examplejava Codingbat notAlone——为什么它不适用于这个特定的例子 【发布时间】:2019-04-26 20:07:05 【问题描述】:如果数组中的元素前后都有值,并且这些值与它不同,那么我们会说数组中的元素是“单独的”。返回给定数组的一个版本,其中给定值的每个实例都被其左侧或右侧较大的值替换。
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]
public int[] notAlone(int[] nums, int val)
for(int k = 1 ; k<nums.length; k++)
if(k!= nums.length-1)
int max = nums[k];
if(nums[k-1]>nums[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] = max;
return nums;
当我在 codingbat 上运行它时,它适用于除此之外的所有示例: notAlone([1, 2, 3, 2, 5, 2], 2) 应该返回[1, 3, 3, 5, 5, 2],但是我的返回[1, 3, 3, 3, 5, 2 ].
我真的被困在如何解决这个问题上,因为在我看来,我所写的内容也应该适用于这个特定的示例,但显然它没有。我的错误来自哪里?我应该如何重写我的代码?任何帮助将不胜感激!
【问题讨论】:
nums[k+1] > nums[k]
和 nums[k-1]>nums[k]
。您假设nums[k]
是当前最大的数字。将它们相应地更改为nums[k+1]>max
和nums[k-1]>max
。
您写了if-else-if
,假设如果nums[k-1]>max
是true
,那么nums[k+1]>max
不能是true
。去掉else
,改成两个if
s。
【参考方案1】:
你把事情复杂化了。如果要替换当前元素,则只需要找到上一个和下一个元素的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];
你会得到正确的输出。
【讨论】:
以上是关于java Codingbat notAlone——为啥它不适用于这个特定的例子的主要内容,如果未能解决你的问题,请参考以下文章
在 return 语句中找不到适合 ArrayList<String> .toArray(String[]::new) 的方法