【发布时间】:2020-04-21 06:46:34
【问题描述】:
我正在尝试编写一个函数来确定一个数组是否包含至少 N 个数字的连续数字。比如输入是[1,5,3,4]和3,就变成true,因为数组有3连续的数字,也就是[3,4,5]
这里这个函数需要预先排序,我认为这不是最有说服力的解决方案。有人可以看看并对此进行一些改进吗?
function hasConsecutiveNums(array, N) {
if (array.length < N) return false;
if (N === 0) return true;
const sortedArray = array.slice().sort((a, b) => a - b);
let count = 0;
let prev = null;
for (const num of sortedArray) {
if (prev && num === prev + 1) {
count++;
} else {
count = 1;
}
if (count === N) return true;
prev = num;
}
return false;
}
console.log(hasConsecutiveNums([1, 4, 5, 6], 3)) // true
console.log(hasConsecutiveNums([1, 4, 5, 6], 4)) // false
【问题讨论】:
-
我认为如果你想最小化计算复杂度,提前排序是正确的方法。可能还有另一种方法,但你的一般策略是我也会使用的方法
-
是的,我同意CertainPerformance。或者至少我想不出比排序数组更好/更快的解决方案。你的代码看起来很高效:)
标签: javascript arrays algorithm data-structures