找到具有最大乘积的相邻元素对(错误消息)
Posted
技术标签:
【中文标题】找到具有最大乘积的相邻元素对(错误消息)【英文标题】:find the pair of adjacent elements that has the largest product (incorrect message) 【发布时间】:2021-11-23 13:39:33 【问题描述】:我不断收到错误消息,请解释一下有什么问题?
这是一个挑战问题: 给定一个整数数组,找到具有最大乘积的相邻元素对并返回该乘积。 示例
对于inputArray = [3, 6, -2, -5, 7, 3],
输出应该是 adjacentElementsProduct(inputArray) = 21.
7 和 3 生产最大的产品。
这是我的代码答案:
function adjacentElementsProduct(inputArray)
for(let i=0;i<inputArray.length;i++)
let prod =Math.max(inputArray[i]*inputArray[i+1]);
return prod;
【问题讨论】:
您好,您的问题是如何解决的?你看到我的回答了吗?我想它可能会对你有所帮助。请给一些反馈。干杯。 【参考方案1】:1)你必须得到两个数字的最大值为
sum = Math.max(sum, inputArray[i] * (inputArray[i + 1] ?? 1));
2) 您还必须处理最后一种情况,即i + 1
将是undefined
,然后您乘以1
。你可以使用null coalescing operator
(inputArray[i + 1] ?? 1)
function adjacentElementsProduct(inputArray)
let sum = 0;
for (let i = 0; i < inputArray.length; i++)
sum = Math.max(sum, inputArray[i] * (inputArray[i + 1] ?? 1));
return sum;
const inputArray = [3, 6, -2, -5, 7, 3];
console.log(adjacentElementsProduct(inputArray));
【讨论】:
在i = 5
,inputArr[i + 1]
将是 undefined
所以 ??
是 null coalescing 运算符。
nullish 合并运算符 (??) 是一个逻辑运算符,当其左侧操作数为 null 或未定义时返回其右侧操作数,否则返回其左侧操作数。 【参考方案2】:
你应该纠正的事情:
-
当索引达到
inputArray
的长度时,
inputArray[i+1]
将抛出 OutOfIndex
错误,因为
索引的范围是从0
到inputArray.length - 1
,这里
最后一个 i
的值将是 inputArray.length - 1
然后
i+1
的值将是 inputArray.length
,这是不正确的。
您应该创建一个变量(考虑 max_res
)来保存之前的最大结果并将其与新结果进行比较。
在for loop
之前定义prod
变量,因为首先在loop
中定义的变量在loop
结束后将无法访问。
定义一个变量来存储i
的索引,该索引使最大值,因为问题也需要索引。
您应该像这样更改您的代码,以获得正确的输出:
function adjacentElementsProduct(inputArray)
let max_res = Number.NEGATIVE_INFINITY;
let res_index = -1;
let prod = 0;
for (let i = 0; i < inputArray.length - 1; i++)
prod = Math.max(inputArray[i] * inputArray[i + 1]);
if (prod > max_res)
max_res = prod;
let res_index = i;
return prod;
let inputArray = [3, 6, -2, -5, 7, 3]
let prod = adjacentElementsProduct(inputArray)
console.log(prod);
【讨论】:
感谢您的解释,但是当我编辑它时,我一直收到不正确的消息,还有另一个错误我无法解决 我更新了我的答案,它现在可以工作了:)【参考方案3】:Number.MIN_SAFE_INTEGER
将允许最小整数,因为这需要找到可能包含负整数的最大和。
function solution(inputArray)
let largestProduct = Number.MIN_SAFE_INTEGER;
for (let i = 0; i < inputArray.length; i++)
if(inputArray[i] * inputArray[i + 1] > largestProduct)
largestProduct = inputArray[i] * inputArray[i + 1];
return largestProduct;
【讨论】:
以上是关于找到具有最大乘积的相邻元素对(错误消息)的主要内容,如果未能解决你的问题,请参考以下文章
如何找到 Numpy 数组的 M 个元素的 N 个最大乘积子数组?
回溯篇在Python中实现数组中查找具有最大乘积的相邻子数组
LeetCode 1460. 通过翻转子数组使两个数组相等 / 658. 找到 K 个最接近的元素 / 1464. 数组中两元素的最大乘积
LeetCode 1460. 通过翻转子数组使两个数组相等 / 658. 找到 K 个最接近的元素 / 1464. 数组中两元素的最大乘积