为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

月关宝盒 2019-03-13 18:15:55
比如有 1,2,5,6,7,11,14这组号码,怎么过滤出[1,2]和[5,6,7]这两组号码?求指点
查看完整描述

5 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

这种逻辑?


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


查看完整回答
反对 回复 2019-03-29
?
慕森卡

TA贡献1806条经验 获得超8个赞

这样行吗?


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


查看完整回答
反对 回复 2019-03-29
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

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;

}


查看完整回答
反对 回复 2019-03-29
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

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


查看完整回答
反对 回复 2019-03-29
  • 5 回答
  • 0 关注
  • 320 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信