我有一个像这样的整数数组:
arr[20,120,111,215,54,78];
我需要一个以数组作为参数并返回该数组的第二大元素的函数。
原文由 Amar Banerjee 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个像这样的整数数组:
arr[20,120,111,215,54,78];
我需要一个以数组作为参数并返回该数组的第二大元素的函数。
原文由 Amar Banerjee 发布,翻译遵循 CC BY-SA 4.0 许可协议
在不修改原始数组的情况下,最直接的实现是迭代并跟踪最大的和下一个最大的:
function nextBiggest(arr) {
let max = -Infinity, result = -Infinity;
for (const value of arr) {
const nr = Number(value)
if (nr > max) {
[result, max] = [max, nr] // save previous max
} else if (nr < max && nr > result) {
result = nr; // new second biggest
}
}
return result;
}
const arr = ['20','120','111','215','54','78'];
console.log(nextBiggest(arr));
原文由 Ja͢ck 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
原答案
演示
更新 1
正如 davin 所指出的,可以通过不进行拼接来提高性能,而是 暂时 将最大值替换为
-Infininty
:无论如何,恕我直言,最好的算法是杰克的。 1 遍,转换为数字。我的很短,使用内置方法,只是想提供它作为替代方案,以展示您可以实现目标的所有不同方式。
更新 2
具有多个值的边缘情况。
正如评论指出的那样:如果我们有一个像
[3, 3, 5, 5, 5, 4, 4]
这样的数组,这个解决方案“不起作用”。另一方面,我们认为“第二大元素”也是一个解释问题。在示例中,我们有:第二大元素可以解释为: