javascript - 编写一个函数来判断一个数组是否包含至少 N 个数字的连续数字
问题描述
我正在尝试编写一个函数来确定数组是否包含至少 N 个数字的连续数字。比如输入是[1,5,3,4]
and 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
解决方案
你可以做一些改变
- 初始化
prev
(如果添加数字undefined
,null
则作为数字零),这允许 - 省略检查
prev
- 在第一条语句中移动检查计数,
if
如果找到想要的递增计数,请提前退出。
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 = undefined;
for (const num of sortedArray) {
if (num === prev + 1) {
if (++count === N) return true;
} else {
count = 1;
}
prev = num;
}
return false;
}
console.log(hasConsecutiveNums([1, 4, 5, 6], 3)) // true
console.log(hasConsecutiveNums([1, 4, 5, 6], 4)) // false