寻找一个整数数组中相邻元素乘积最大的一组,并返回这个乘积。

9

给定一个整数数组,找到相邻元素之间乘积最大的一对,并返回该乘积。

这是我的代码:

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

问题在于所有的测试都能正常运行,但是除了负积数组(如附图所示)。 有人能帮忙吗?提前感谢。

循环的最后一次迭代将 y 设置为 arr[arr.length],这不是一个有效的索引。 - rici
问题在于你将 p 设为了 0。在这种情况下,所有的乘积都是负数,因此你永远找不到更大的乘积。如果你将其设为 -Infinity,看起来应该就可以解决问题了。 - Scott Sauyet
20个回答

6
你可以从一个非常大的负值开始,而不是零。
var p = -Infinity;

4

您正在将变量p初始化为零。这意味着任何小于该值的乘法值都不被接受。相反,将其设置为最小可能的整数值:

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


3
这其实相当简单。

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

2
这其实很简单。

const solution = (inputArray) => Math.max(...inputArray.slice(0, -1).map((n, index) => n * inputArray[index + 1]))

console.log(solution([3, 6, -2, -5, 7, 3]))


1
问题: 给定一个整数数组,找到相邻元素对中乘积最大的一对,并返回该乘积。 #javascript # arraymethods
function solution(inputArray) {
    let productsArr = []; // to hold the products of adjacent elements
    let n = 0;
    for (let i = 0; i < inputArray.length; i++) {
        if (i < inputArray.length - 1) 
        {
            productsArr[n] = inputArray[i] * inputArray[i + 1];
            n++;
        }
    }
    return productsArr.reduce((aggr, val) => Math.max(aggr, val)); // to find out the biggest product
}

1
function solution(inputArray: number[]): number {
    var max = -Infinity;
    
    for(var i=0; i+1<inputArray.length; i++)
    {
        if(max<(inputArray[i]*inputArray[i+1])){
            max=inputArray[i]*inputArray[i+1];
        }
    }
    return max;
}

console.log(solution([2,3,6]))

1

起初我也遇到了同样的问题,把第一个 max 定义为 0。但后来我想到了这种解决方法:

function solution(inputArray) {
    let products = inputArray.map(function(x, index){
        return inputArray[index+1] != undefined? x *inputArray[index+1] : -Infinity;
    })
    return Math.max(...products);
}

0

你可以尝试将整数初始化为负无穷大值-math.inf,然后使用Python三元运算符var=true if condition else false来找到最大值

Python代码:

def adjacentarray(a):
    maximum=-math.inf
    for i,in range(0,len(a)-1):
        maximum=a[i]*a[i+1] if a[i]*a[i+1]>maximum else maximum
    return maximum

JavaScript 编写的代码

function adjacentElementsProduct(a) {
    var maximum=-Infinity;
    for (var i=0;i<a.length-1;i++){
        maximum= a[i]*a[i+1]>maximum?a[i]*a[i+1]:maximum;
    }
    return maximum;
}

1
嗨,这段代码似乎不是JavaScript,因为问题已经被标记并在标题中提示。你能否将代码改为JavaScript? - niccord
1
嗨@niccord,我已经在JavaScript中更新了代码。 - ANUSHIYA ASOKAN

0

这是一个非常简单的实现,不使用任何额外的变量(实际上更少),也没有特殊值。只是简单的逻辑。

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

我所做的是,用数组的前两个元素的乘积初始化一个变量c(当前产品)。然后我声明了变量p并将其初始化为c。这样,所有其他产品都与此产品进行比较。其余部分很简单。
希望能有所帮助。 :)

0

Python解决方案

您可以从1循环到列表的末尾,并执行以下算术运算

def solution(inputArray):
    list1 =[]
    for i in range(1,len(inputArray)):
        list1.append(inputArray[i]*inputArray[i-1]) 
    return max(list1)

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接