gpt4 book ai didi

Javascript:在数组中查找连续数字时保持关闭

转载 作者:行者123 更新时间:2023-11-30 09:17:34 26 4
gpt4 key购买 nike

我正在做一些编码练习,并在网上发现了一些问题。
在返回数组中连续数字的数量时,我总是得到比预期低 1 个整数。

function LongestConsecutive(arr) { 

arr.sort((a,b) => {return a-b});

let highest = 0;
let counter = 0;
let prevNum;

arr.forEach((num,index,arr) => {
if (prevNum === undefined) {
prevNum = num
} else {

if (num + 1 == arr[index + 1]) {
counter += 1;
highest = Math.max(highest,counter)
} else {
counter = 0;
}
}
})
return highest;
}

例如,输入 [5, 6, 1, 2, 8, 9, 7],应该返回 5 —— 因为排序时,有 5 个连续的数字。我一直得到比我应该得到的低 1,所以对于这个例子,我得到 4。获得正确答案的唯一方法是当我返回“最高 + 1”时,这显然是在避免这个问题。

最佳答案

第一次迭代会命中

if (prevNum === undefined) {
prevNum = num;
}

但这不是已经是第一个连续的数字了吗?所以 counter = 1;highest = 1; 应该在这里。

接下来,您在 else 情况下重置 counter = 0;。为什么?至少有一个数字是连续的,因此请将其重置为 1

那么,您实际上并没有将 prevNum 用于任何事情。 if (prevNum === undefined) 可以替换为 if (index === 1)

然后您检查当前数字 (num) 是否在下一个数字 (arr[index + 1]) 之前,但是您跳过第一个索引的检查。如何检查当前数字是否在前一个数字之后?

此代码使用上述更改加上一些代码质量更改:

function longestConsecutive(arr) { // Non-constructor functions start with a lower-case letter
arr.sort((a, b) => a - b); // Use expression form

let highest = 0;
let counter = 0;

arr.forEach((num, index, arr) => {
if (index === 0) {
highest = 1;
counter = 1;
} else if (num - 1 === arr[index - 1]) { // Merge `else if`, use strict equal
counter += 1;
highest = Math.max(highest, counter);
} else {
counter = 1;
}
});

return highest;
}

关于Javascript:在数组中查找连续数字时保持关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54000298/

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