【发布时间】:2015-09-29 06:37:16
【问题描述】:
假设我有以下排序的向量作为输入:
[22]
[22, 23]
[22, 46]
[22, 46, 47]
[22,23,33,44,45,46,55,56]
我想要以下输出,它显示每个向量中连续数字的计数:
1 //edgecase: if there's 1 number it's consecutive)
2 //22, 23 are 2 consecutive numbers
0 //22, 46 not consecutive
2 //46, 47 are 2 consecutive numbers
7 //22,23 (2) 44,45,46 (3) 55,56(2) 7 consecutive numbers
我的向量不会有重复项。
到目前为止我所拥有的是:
vector<int> numbers;
int consecCount=0;
if (numbers.size()==1)
consecCount++;
else{
for (size_t k=1; k<numbers.size(); k++) {
if (numbers[k]==numbers[k-1]+1) {
consecCount +=2;
}
}
当然这个方法不适用于最后一个数组。解决方案似乎真的错了。
我的实际向量非常大,所以更喜欢任何不涉及使用另一个向量的想法
【问题讨论】:
-
你能解释一下输出数字是什么意思吗?
-
向量总是排序的吗?
-
所以你的输入是
vector<vector<int>>? -
问题编辑与输出的含义。是的,向量总是排序的。
-
为什么不存储一个布尔标志,如“连续两个以上”或类似的东西?