项目中总是需要求一个向量中连续的非零元素的起始位置。这个问题可以抽象为以下问题。
问题描述:一个一维数组中的元素不是1就是0,要求求出数组中每段连续是“1”的元素的起始位置和结束位置。
如上图是一个含有10个元素的一维数组,统计所有连续为1的段的位置,以0作为数组的起点。
则1的位置为:
起始位置 结束位置
第一段 0 0
第二段 2 4
第三段 7 9
具体思路:
1、初始化一个计数器count=0;
2、可以遍历数组,当遇到一个为1的元素时,计数器加1.
并把当前的元素的下标赋给一个变量end。
3、当元素为0的时候,就说明连续为1的段已经结束。
那么连续为1的段结束位置就是end,起始位置就是end-(count-1)。
把这个位置记录下来。并把count=0。
我的程序:
<pre name="code" class="html">#include<iostream>
#include<vector>
using namespace std;
int main()
{
int arr[]={1,0,1,1,1,0,0,1,1,1};
vector<int> vec;
int len=sizeof(arr)/sizeof(arr[0]);
int count=0;
int end=0;
for(int ii=0;ii<len;ii++)
{
if(arr[ii]==1)
{
count++;
end=ii;
if(ii==len-1)
{
vec.push_back(end-(count-1));
vec.push_back(end);
}
}
else
{
if(count>0)
{
vec.push_back(end-(count-1));
vec.push_back(end);
count=0;
}
}
}
if(!vec.empty())
{
printf("start\tend\n");
for(int jj=0;jj<vec.size();jj+=2)
{
printf("%d\t%d\n",vec[jj],vec[jj+1]);
}
}
else
{
printf("There is not \"1\"in arr.\n");
}
return 0;
}
对于10个元素的全部为0的数组,输出结果如下: