【发布时间】:2023-03-06 02:03:01
【问题描述】:
如果数组中的元素前后都有值,并且这些值与它不同,那么我们会说数组中的元素是“单独的”。返回给定数组的一个版本,其中给定值的每个实例都被其左侧或右侧较大的值替换。
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,改成两个ifs。
标签: java arrays loops for-loop if-statement