Dada una serie de enteros, encuentre el par de elementos adyacentes que tiene el producto más grande y devuelva ese producto.

Y aquí está mi código

function adjacentElementsProduct(inputArray) {
 var arr = inputArray;
  var x=0;
  var y=0;
  var p=0;
  for(var i=0;i<arr.length;i++){
    x=arr[i];
    y=arr[i+1];
    if(x*y>p){
     p=x*y;
    };
  };
 return p;
};

el problema es que todas las pruebas funcionan bien, excepto la matriz con el producto negativo como se muestra en la foto adjunta ¿Alguien puede ayudar ... y gracias de antemano

introduzca la descripción de la imagen aquí

3
Fady Safwat 28 oct. 2017 a las 17:03

5 respuestas

La mejor respuesta

Podría comenzar con un valor negativo realmente grande, en lugar de cero.

var p = -Infinity;
3
Nina Scholz 28 oct. 2017 a las 14:05

Esto es bastante simple en realidad

function adjacentElementsProduct(inputArray) {
    let max = -Infinity;
    for (let i = 1; i < inputArray.length; i++) {
        max = Math.max(inputArray[i] * inputArray[i - 1], max);
    }

    return max;
}
0
0xcaff 13 ago. 2019 a las 23:29

Está inicializando la variable p a cero. Eso significa que no se aceptan valores de multiplicación más pequeños que eso. En su lugar, configúrelo con el valor entero más pequeño posible:

var p = Number.MIN_SAFE_INTEGER;
function adjacentElementsProduct(inputArray) {
  var arr = inputArray;
  var x = 0;
  var y = 0;
  var p = Number.MIN_SAFE_INTEGER;
  for (var i = 0; i < arr.length; i++) {
    x = arr[i];
    y = arr[i + 1];
    if (x * y > p) {
      p = x * y;
    };
  };
  return p;
};

console.log(adjacentElementsProduct([-23, 4, -3, 8, -12]));
2
Nisarg 28 oct. 2017 a las 14:06

Aquí hay una implementación muy simple sin usar variables adicionales (en realidad menos), y sin valores especiales. Solo lógica simple.

function adjacentElementsProduct(inputArray) {
    var c =inputArray[0]*inputArray[1];
    var p = c;
    for(var i=1;i<inputArray.length;i++){
        console.log(c);
        var c=inputArray[i]*inputArray[i+1];
        if(c > p){
            p=c;
        };
    };
    return p;
};
console.log("minimum product = " + adjacentElementsProduct([-23,4,-3,8,-12]));

Lo que hice fue inicializar una variable c (producto actual) con el producto de los dos primeros elementos de la matriz. Y luego declare la variable p y la inicialice a c. De esta manera, todos los demás productos se comparan con este producto. El descanso es simple.

Espero eso ayude. :)

0
Aakash Choubey 28 oct. 2017 a las 21:36

Puede intentar crear una nueva matriz de longitud (arr.length-1) dentro de la función y agregar los productos de números adyacentes a esta nueva matriz. Luego encuentre el número más grande en la matriz y devuélvalo. Esto resolverá el problema con el producto negativo.

function adjacentElementsProduct(inputArray) {
  var arr = inputArray;
  var prodArr[];
  var p;
  for (var i = 0; i < arr.length-1; i++) {
    prodArr[i] = arr[i]*arr[i+1];
  };
  for (j=prodArr.length; j--){
  if (prodArr[j] > p) {
      p = prodArr[j];
    };
  return p;
};

console.log(adjacentElementsProduct([-23, 4, -3, 8, -12]));
0
Sarvesh Redkar 28 oct. 2017 a las 14:30