鍍金池/ 問答/Java  PHP  C++  C#  HTML/ 怎么過濾出一組號碼中的順子號碼?

怎么過濾出一組號碼中的順子號碼?

比如有 1,2,5,6,7,11,14這組號碼,怎么過濾出[1,2]和[5,6,7]這兩組號碼?
求指點(diǎn)

回答
編輯回答
骨殘心

C++來湊個(gè)熱鬧。

#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;
}
2018年6月28日 07:41
編輯回答
挽歌

和這個(gè)問題很像https://segmentfault.com/q/10...

2018年4月8日 14:59
編輯回答
局外人

結(jié)果更正中...

2017年9月19日 07:48
編輯回答
涼汐

這樣行嗎?

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]));
2018年2月27日 20:56
編輯回答
神經(jīng)質(zhì)

這種邏輯?

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);
2018年6月24日 22:41
編輯回答
凹凸曼
    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);
2018年7月4日 17:44