簡體   English   中英

java Codingbat notAlone - 為什么它不能用於這個特定的例子

[英]java Codingbat notAlone — why doesn't it work for this specific example

如果在它之前和之后有值,那么我們會說數組中的元素是“單獨的”,並且這些值與它不同。 返回給定數組的一個版本,其中給定值的每個實例單獨替換為其左側或右側的較大值。

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

我真的被困在如何解決這個問題上,因為在我看來,我所寫的內容也適用於這個特定的例子,但顯然它沒有。 我的錯誤來自哪里? 我該如何重新編寫代碼? 真的很感激任何幫助!

你復雜化了。 如果要替換當前元素,您只需要找到上一個和下一個元素的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];

你會得到正確的輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM