我有一个数组
arr = [1,2,3,4,6,7,8,9]
现在我想检查数组中的值是否连续。
更具体地说,我想要这样:
第一次检查应该给出第一个和第二个元素是连续的,而下一个元素不连续,那么算法必须返回连续数字开始的第一个元素。
比如
First Check will give 1
Second Check will give 6
and so on...
Please help Thanks in advance
我有一个数组
arr = [1,2,3,4,6,7,8,9]
现在我想检查数组中的值是否连续。
更具体地说,我想要这样:
第一次检查应该给出第一个和第二个元素是连续的,而下一个元素不连续,那么算法必须返回连续数字开始的第一个元素。
比如
First Check will give 1
Second Check will give 6
and so on...
Please help Thanks in advance
/**
* Given an array of number, group algebraic sequences with d=1
* [1,2,5,4,8,11,14,13,12] => [[1,2],[4,5],[8],[11,12,13,14]]
*/
import {reduce, last} from 'lodash/fp';
export const groupSequences = (array) => (
reduce((result, value, index, collection) => {
if (value - collection[index - 1] === 1) {
const group = last(result);
group.push(value);
} else {
result.push([value]);
}
return result;
}, [])(array)
);
/**
* Given an array of number, group algebraic sequences with d=1
* [1,2,3,4,5,6] => true
* [1,2,4,5,6] => false
*/
const differenceAry = arr.slice(1).map(function(n, i) { return n - arr[i]; })
const isDifference= differenceAry.every(value => value == 1)
console.log(isDifference);
需要注意的一点是,您希望多次调用它,因此每次调用都应该知道它正在处理哪个数组以及该数组中先前的offset
是什么。您可以做的一件事是扩展本机的Array
对象。[演示]
Array.prototype.nextCons = (function () {
var offset = 0; // remember the last offset
return function () {
var start = offset, len = this.length;
for (var i = start + 1; i < len; i++) {
if (this[i] !== this[i-1] + 1) {
break;
}
}
offset = i;
return this[start];
};
})();
使用方法
var arr = [1,2,3,4,6,8,9];
arr.nextCons(); // 1
arr.nextCons(); // 6
arr.nextCons(); // 8
arr.nextCons(true);
和 arr.nextCons("reset");
。 - gblazex检查数组中的所有数字是否连续:
2022年3月更新
const allConsecutives = (arr) =>{
if(arr.some(n=> typeof n !== "number" || Number.isNaN(n))) return false;
return arr.every((num, i)=> arr[i+1]-num === 1 || arr[i+1] === undefined)
}
伪代码:
int count = 0
for i = 0 to array.length - 2
if {array[i + 1] - array[i] = 1 then
count+=1
return i
else count=0}
const array1 = [1,2,3];
const sum = array1.reduce((accumulator, currentValue) =>{
return accumulator + currentValue;
});
const max = Math.max(...array1);
maximum = max
if(sum == maximum * (maximum+1) /2) {
console.log(true);
} else {
console.log(false);
}
1,6,8
,还是想要多次运行并在每次运行中获取下一个数字? - roryf