当前位置: 首页 > 知识库问答 >
问题:

Java Codingbat not Alone-为什么它不适用于这个特定的示例

宿鹏程
2023-03-14

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

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

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

不孤独([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上运行这个时,它适用于所有示例,除了这个:not Alone([1, 2, 3, 2, 5, 2],2)应该返回[1, 3, 3, 5, 5, 2],但我的返回了[1, 3, 3, 3, 5, 2]。

我真的很想知道如何解决这个问题,因为在我看来,我写的东西也应该适用于这个特定的示例,但显然不是。我的错误来自哪里?我应该如何重写我的代码?任何帮助都将非常感谢!

共有1个答案

郎飞龙
2023-03-14

你把事情复杂化了。如果要替换当前元素,则只需找到上一个和下一个元素的最大值:

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

您将获得正确的输出。

 类似资料:
  • 我有一个奇怪的场景,当使用lambda表达式时,类型推断没有像我预期的那样工作。以下是我真实场景的近似值: 我在倒数第二行得到的编译错误是 方法booleanValue()未为类型Object定义 如果我将lambda转换为

  • 问题内容: 假设我有这个模型: 现在,如果我想高效地查看相册中的一部分照片。我这样做是这样的: 这只会执行两个查询,这正是我所期望的(一个查询得到相册,然后一个查询,例如“ SELECT * IN photos WHERE photoalbum_id IN()”。 一切都很棒。 但是,如果我这样做: 然后用!进行大量查询!我是在做错什么,还是django不够聪明,以至于它已经获取了所有照片并可以在

  • https://godbolt.org/z/P97MaK 我玩的概念和预期d::is_equality_comparable工作矢量,但它没有。 编译错误在 内部失败,而不是在受概念保护的函数边界处失败。 这是错误还是预期行为?

  • 我有这个密码: 这给我留下了编译器对我大喊大叫: 我花了很长时间才明白我必须改变Vec 代码现在编译,但我完全不明白这里到底有什么问题。为什么要在Vec定义中发送代码?我的意思是,这个特性已经实现了发送克隆。对我来说,这看起来相当多余。 有人能和我分享他的智慧吗,为什么我必须这样修改代码?

  • 我在更新链式lodash操作时遇到了这个问题,我不明白为什么会有不同的效果 我把范围缩小到用链子把一根forEach拴在一个lodash包装纸上 https://jsbin.com/wahokezeja/edit?js,控制台 这将抛出一个错误: “TypeError:\(…)。forEach(…)。groupBy不是一个函数 但是,当使用贴图链接时,效果很好 https://jsbin.com/