gpt4 book ai didi

javascript - 仅使用一个循环javascript数组中相同值之间的差异

转载 作者:行者123 更新时间:2023-12-03 04:10:15 24 4
gpt4 key购买 nike

如何用一个循环找出数组中相同值的最小和最大索引之间的差异,复杂度恰好为 O(N)?

例如,给定数组 A:

[4, 6, 2, 2, 6, 6, 1];

函数返回 4。

最佳答案

我会使用reduce来记住每个值的第一个索引,然后更新最后一个值和最大传播,例如

var data = [4, 6, 2, 2, 6, 6, 1];

function getMaxIndexSpread(data) {
return data.reduce(function(acc, value, index) {

if (value in acc) {
acc[value].lastIndex = index

} else {
acc[value] = {firstIndex: index, lastIndex: index};
}
var spread = acc[value].lastIndex - acc[value].firstIndex;

if (acc.maxSpread < spread) acc.maxSpread = spread;

return acc;
}, {maxSpread: 0}).maxSpread;
}

console.log(getMaxIndexSpread(data));

可能有一种更时髦的方式,但这对我来说很有意义。

var data = [4, 6, 2, 2, 6, 6, 1];

console.log(Math.max(...data.map((v,i) => i - data.indexOf(v))));

关于javascript - 仅使用一个循环javascript数组中相同值之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44362145/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com