怎么过滤出一组号码中的顺子号码?

比如有 1,2,5,6,7,11,14这组号码,怎么过滤出[1,2]和[5,6,7]这两组号码?
求指点

阅读 2.9k
6 个回答

这种逻辑?

var arr = [1, 2, 5, 6, 7, 11, 14];
var len = arr.length,
    before = arr[0],
    i = 1,
    res = [],
    result = [],
    current;
for (;i < len; i++) {
    current = arr[i];
    if (current - before === 1 ) {
        if (res.length === 0)
            res.push(before);
        res.push(current);
    } else {
        if (res.length) {
            result.push(res);
        }
        res = [];
    }
    before = current;
}
if (res.length) {
    result.push(res);
}
console.log(result);

这样行吗?

function subsequence(arr) {
    if (!arr || arr.length < 2) return [];

    let result = [],
        curr = arr[0],
        subArr = [curr];
    for (let i = 1; i < arr.length; i++) {
        if (arr[i] === curr + 1) {
            subArr.push(arr[i]);
            curr = arr[i];
        } else {
            if (subArr.length > 1) {
                result.push(subArr);
            }
            curr = arr[i];
            subArr = [curr];
        }
    }

    if (subArr.length > 1) {
        result.push(subArr);
    }

    return result;
}

// test
console.log(subsequence([]));
console.log(subsequence([0]));
console.log(subsequence([1,2,5,6,7,11,14]));
console.log(subsequence([1,2,3,4,7,8,9,11,23,45,56,66,67]));
console.log(subsequence([9, 8, 7, 7, 8, 9, 0]));

C++来凑个热闹。

#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>

template <class It>
std::vector<std::vector<int>> Solution(It first, It last) {
  std::vector<std::vector<int>> result;
  while (first != last) {
    auto ite = std::adjacent_find(first, last, [](int l, int r) {return l != r-1;});
    if (ite != last)
      ++ite;
    if (std::distance(first, ite) > 1)
      result.emplace_back(first, ite);
    first = ite;
  }
  return result;
}

int main() {
  std::vector<int> vtr = {1, 2, 3, 5, 1, 2, 1};

  for (const auto &result : Solution(vtr.begin(), vtr.end())) {
    std::copy(result.begin(), result.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
  }

  return 0;
}
    const arr = [1, 2, 3, 4, 7, 8, 9, 11, 23, 45, 56, 66, 67],
        len = arr.length;

    let i = 0,
        c = -1;

    let newArr = [];

    while (i < len) {
        let t = arr[i] - i;
        if (t === c) {
            newArr.pop();
        } else {
            newArr.push(arr[i]);
            c = t;
        }
        i = i + 1;
    }

    console.log(newArr);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏