C++ 查找数组中一组数字的起点和终点
我有一个288个值的数组。它在一个组中以任意组合包含1和0 e、 g 它可以由一组零或一组一开始和结束。但可以保证数组中至少有一组0或1。我的兴趣是将一组索引的开始和结束存储在一个数组中。e、 g 6,16,23在第一个示例中是起始索引(假设这是要存储的向量),11,19是结束索引 我希望这是通用的。因为我的数组可以从任何组开始 我使用下面的代码来实现这一点,但是我没有成功地实现完整的逻辑。下面的代码是我写的一小部分,它只处理一种可能性C++ 查找数组中一组数字的起点和终点,c++,arrays,algorithm,search,C++,Arrays,Algorithm,Search,我有一个288个值的数组。它在一个组中以任意组合包含1和0 e、 g 它可以由一组零或一组一开始和结束。但可以保证数组中至少有一组0或1。我的兴趣是将一组索引的开始和结束存储在一个数组中。e、 g 6,16,23在第一个示例中是起始索引(假设这是要存储的向量),11,19是结束索引 我希望这是通用的。因为我的数组可以从任何组开始 我使用下面的代码来实现这一点,但是我没有成功地实现完整的逻辑。下面的代码是我写的一小部分,它只处理一种可能性 std::vector<float>start
std::vector<float>start_index
std::vector<float>end_index
float alter_value = array[0];
for (int i = 0; i < array.size(); i++)
{
if (alter_value == 0)
{
if(array[i+1] != alter_value)
{
start_index.push_back(array[i+1]);
alter_value = array[i+1]; // this makes my alter_value = 1
}
}
}
std::vectorstart\u索引
std::vectorend_索引
浮点alter_值=数组[0];
对于(int i=0;i
也许我无法以更好的方式表达我想要的东西。但我希望您能理解。您想存储索引,但却存储数组值。索引是整数,因此索引向量必须是
向量
,而不是
start_index.push_back(array[i+1])
你必须这样做
start_index.push_back(i+1)
您可以在数组中查找
1
,找到后,记录其位置并跳过所有相邻的1。一旦你达到零,你可以继续重复同样的事情(寻找下一个1
)
编辑后的代码如下所示。还要注意声明中的一些更改
std::vector<int> start_index
std::vector<end> end_index
for (int i = 0; i < array.size(); i++)
{
if (array[i] == 1)
{
start_index.push_back(i);
while(array[i] == 1 && i < array.size()) {
i++;
}
//will reach here if array[i] == 0 or array is exhausted
end_index.push_back(i - 1);
}
}
std::向量开始索引
std::向量结束索引
对于(int i=0;i
最简单的方法:)
int last=array[0];
启动索引。将索引向后推(0);
对于(int i=1;i > p>你可以考虑下面的算法。它是在伪代码中——我不是C++风扇,但是重写它对任何语言都应该是微不足道的:
它循环遍历整个输入并检测组的边缘,将它们存储在结果*数组中
array; // input array
resultStarts; // array of indexes of starts of groups
resultEnds; // array of indexes of ends of groups
searchFor = 1; // element of groups
inGroup = false;
for(i=0;i<length(array);i++) {
if((array[i] == searchFor) && ! inGroup) {
// it's start of group
inGroup = true; // mark it
push(resultStarts, i);
}
if(inGroup && ((array[i] != searchFor) || i == length(array))) {
// end of group (of the input)
inGroup = false;
push(resultEnds, i);
}
}
数组;//输入阵列
结果开始;//组开头的索引数组
结果;//组末尾的索引数组
searchFor=1;//群元素
inGroup=false;
对于(i=0;iyou提到的end_index.push_back(i-1);。它不应该是end_index.push_back(i);?@MT当您跳出循环时,数组[i]等于0
,您需要记录最后一个1
的位置,即i-1
。
int last = array[0];
start_index.push_back(0);
for (int i = 1; i < array.size(); i++) {
if (array[i] != last) {
start_index.push_back(i);
last = array[i];
}
}
array; // input array
resultStarts; // array of indexes of starts of groups
resultEnds; // array of indexes of ends of groups
searchFor = 1; // element of groups
inGroup = false;
for(i=0;i<length(array);i++) {
if((array[i] == searchFor) && ! inGroup) {
// it's start of group
inGroup = true; // mark it
push(resultStarts, i);
}
if(inGroup && ((array[i] != searchFor) || i == length(array))) {
// end of group (of the input)
inGroup = false;
push(resultEnds, i);
}
}