C++ 查找int数组中连续值的运行

C++ 查找int数组中连续值的运行,c++,arrays,search,C++,Arrays,Search,假设我有一个单独整数元素的整数数组: 111100010011010 我想知道这个数组中是否存在0000,显然不存在,但是000存在。连续运行的其他长度也是如此 我知道这很容易用字符串完成,有内置函数,但是有内置的东西可以完成我想做的事情吗 还是我忽略了另一个简单的方法?我所能想到的只是通过数组并将值保存到另一个临时数组中的复杂的无效算法。无需将值保存到临时数组中 您所需要做的就是跟踪找到的最大长度(最初为零)及其第一个元素的位置(如果使用指针指示,则最初为NULL) 然后遍历数组,直到找到感

假设我有一个单独整数元素的整数数组:

111100010011010
我想知道这个数组中是否存在
0000
,显然不存在,但是
000
存在。连续运行的其他长度也是如此

我知道这很容易用字符串完成,有内置函数,但是有内置的东西可以完成我想做的事情吗


还是我忽略了另一个简单的方法?我所能想到的只是通过数组并将值保存到另一个临时数组中的复杂的无效算法。

无需将值保存到临时数组中

您所需要做的就是跟踪找到的最大长度(最初为零)及其第一个元素的位置(如果使用指针指示,则最初为NULL)

然后遍历数组,直到找到感兴趣的值。计算连续出现的次数。如果该数字超过找到的最大长度,请将位置设置为指向找到的第一个长度

重复此操作,直到到达阵列的末尾

完成了。如果找到的最大长度为零,则表示未出现所需的值

不,我不打算为上述内容编写代码。对该方法的描述已经足够了


还有很多使用标准算法的替代选项

仅用于记录,另一种方法是使用


如果数组是标准容器(如std::array或vector),则更容易

你想在更高的层次上解决什么问题?你所说的“元素”是什么意思?它们只是位,还是独立的整数?您的查询
0000
是否总是一系列相同的数字(例如,可以将其描述为
{digit\u value,count}
)?您的搜索查询是否为
010111
?你知道移位和
&
|
等位运算吗?
int-array={1,1,0,0,…}
这些是数组中独立的整数元素,都是1或0。在更高的层次上,我想检查给定的序列是否是最大长度序列。我只是想开始检查
0000
是否存在于4长度的MLS中,该MLS必须不存在。我知道按位运算,但还不清楚你想实现什么。是否要查找最长跑步记录或检查给定跑步记录是否存在,或确定给定跑步记录是否为最长跑步记录或其他内容?最好将您的无效算法表示为代码。现在我只想检查序列中是否存在“0000”。我还没有把我的算法写成代码,但如果它有帮助的话,下面是我最终想要实现的:它是一个非常简单的算法和O(n)复杂度。没有比这更好的了:)谢谢,这比我想的要简单!这也回答了我的问题,如果C++中有什么东西可以实现这个问题。
#include <algorithm>
using namespace std;

const int elements[] = { 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0 };
const int test1[] = { 0, 0, 0, 0 };
const int test2[] = { 0, 0, 0 };

auto it1 = std::search(begin(elements), end(elements), begin(test1), end(test1));
auto it2 = std::search(begin(elements), end(elements), begin(test2), end(test2));

std::cout << "Test 0000: " << (it1 == end(elements) ? "no" : "yes") << "\n";
std::cout << "Test 000: " << (it2 == end(elements) ? "no" : "yes") << "\n";
Test 0000: no
Test 000: yes