繁体   English   中英

检查数组中的元素是否连续 — javascript

[英]check if elements in array are consecutive — javascript

我有一个数组

arr = [1,2,3,4,6,7,8,9]

现在我想检查数组中的值是否连续。

更具体地说,我想要这个

First Check 给出第一个和第二个元素是连续的,而下一个元素不连续,那么算法必须从连续数字开始的地方返回第一个元素

喜欢

First Check will give 1
Second Check will give 6
and so on...

请帮助提前致谢

/**
 * 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)
);

一个旁注是您想多次调用它,因此每次调用都应该知道它正在处理哪个数组以及该数组中的前一个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
 /**
 * 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);

检查数组中的所有数字是否都是连续的:

   const allConsecutives = (arr) =>{ 
     return arr.every((num, i)=> (arr[i+1]||num+1)-num === 1)
    }

伪代码:

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);
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM