比如有 1,2,5,6,7,11,14这组号码,怎么过滤出[1,2]和[5,6,7]这两组号码?
求指点
这样行吗?
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);
8 回答4.8k 阅读✓ 已解决
3 回答2.6k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
这种逻辑?