java Codingbat notAlone - ¿por qué no funciona para este ejemplo concreto

singularidad:

Diremos que un elemento de una matriz es "solo" si hay valores antes y después de él, y esos valores son diferentes de ella. Devuelve una versión de la matriz dada donde cada instancia de la valor dado que está solo se sustituye por cualquier valor a su izquierda o derecha es más grande.

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

Cuando me encontré con esto en codingbat, funcionó para todos los ejemplos excepto para esto: notAlone ([1, 2, 3, 2, 5, 2], 2) debe devolver [1, 3, 3, 5, 5, 2], pero en lugar mina regresaron [1, 3, 3, 3, 5, 2].

Realmente estoy atascado en la forma de resolver esto, porque en mi mente, lo que he escrito debería funcionar para este ejemplo específico, así, pero al parecer no es así. ¿De dónde viene mi error? ¿Cómo debería volver a escribir mi código? Cualquier ayuda sería realmente apreciada!

Eran :

Usted es mayor de lo que complica la misma. Sólo tiene que encontrar la maxde los elementos anteriores y siguientes si el elemento actual debe ser sustituido:

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

Por cierto, en su solución se ignora el valor dado ( val):

Devolver una versión de la matriz dada, donde cada instancia del valor dado se sustituye el que está solo ...

Esa no es la razón por la cual el código falló en el caso dado, sin embargo. Simplemente no encontró la máxima correcta:

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

Si se ha sustituido estas 5 líneas con:

int max = nums[k-1];
if(nums[k+1] > max)
    max = nums[k+1];

que habría conseguido la salida correcta.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=189306&siteId=1
Recomendado
Clasificación