gpt4 book ai didi

javascript - 识别整数数组中最长的方差周期

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:08:25 24 4
gpt4 key购买 nike

我正在尝试编写一个函数来识别数字数组中最长的方差周期。方差从前一个数大于当前数开始,到下一个数与当前数相同时结束;但是,如果方差没有结束,则假定方差从最后两个数字开始。

例如:[10, 5, 3, 11, 8, 9, 9, 2, 10] 这个数组中最长的方差周期是[5, 3, 11 , 8, 9],或者只是 5(长度)。当以下数字与当前数字相同时,方差结束,在本例中为 9

我编写的函数适用于这种情况;但是,当整个数组有方差时,它不会,例如 [10, 5, 10, 5, 10, 5, 10, 5, 10],返回 8,当它应该是 9 时。

在前一个数字总是小于或总是大于方差的情况下,方差将为 2,因为它从未结束。例如 [2, 4, 6, 8][8, 6, 4, 2]

我知道整个数组方差的问题可以通过从 0 开始 for 循环来解决,但是其他情况就变得无效了。非常感谢任何帮助。

事不宜迟,这是我的代码:

function findVariance(numbers) {
if ([0,1].includes(numbers.length)) return numbers.length;

const variance = [[0]];
let greater = numbers[1] > numbers[0];
let lesser = numbers[1] < numbers[0];

for (let i = 1; i < numbers.length; i++) {
let previous = variance.length - 1;
let previousVarianceGroup = variance[previous];
let previousVarianceGroupValue = previousVarianceGroup[previousVarianceGroup.length - 1];

if (greater) {
if (numbers[i] < numbers[previousVarianceGroupValue]) {
previousVarianceGroup.push(i);
greater = false;
lesser = true;
} else {
greater = numbers[i] < numbers[previousVarianceGroupValue];
lesser = numbers[i] < numbers[previousVarianceGroupValue];
variance.push([previousVarianceGroupValue, i]);
}
} else if (lesser) {
if (numbers[i] > numbers[previousVarianceGroupValue]) {
previousVarianceGroup.push(i);
greater = true;
lesser = false;
} else {
greater = numbers[i] > numbers[previousVarianceGroupValue];
lesser = numbers[i] > numbers[previousVarianceGroupValue];
variance.push([previousVarianceGroupValue, i]);
}
} else {
greater = numbers[i] > numbers[previousVarianceGroupValue];
lesser = numbers[i] < numbers[previousVarianceGroupValue];
variance.push([previousVarianceGroupValue, i]);
}
}

const result = [];

for (let i = 0; i < variance.length; i++) {
result[i] = variance[i].length;
}

result.sort();

return result[result.length - 1];
}

console.log(findVariance([10, 5, 3, 11, 8, 9, 9, 2, 10]));
console.log(findVariance([10, 5, 10, 5, 10, 5, 10, 5, 10]));
console.log(findVariance([2, 4, 6, 8]));

最佳答案

这是我得到的(尽我所能理解问题)

function calculateVariance(arr) {
// trivial cases
if (arr.length <= 1) { return arr.length; }

// store the difference between each pair of adjacent numbers
let diffs = [];
for (let i = 1; i < arr.length; i++) {
diffs.push(arr[i] - arr[i - 1]);
}

let max = 0;

// if the difference between two numbers is 0, they're the same.
// the base max variance encountered is 1, otherwise it's 2.
// the boolean zen here is that diffs[0] is falsy when it's 0, and truthy otherwise
let count = diffs[0] ? 2 : 1;

// go through the array of differences,
// and count how many in a row are alternating above/below zero.
for (i = 1; i < diffs.length; i++) {
if ((diffs[i] < 0 !== diffs[i - 1] < 0) && diffs[i] && diffs[i - 1]) {
count++;
} else {
max = Math.max(count, max);
// see above
count = diffs[i] ? 2 : 1;
}
}

// account for the maximum variance happening at the end
return Math.max(count, max);
}

关于javascript - 识别整数数组中最长的方差周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53337130/

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