在int数组

时间:2015-07-20 08:39:23

标签: c++ arrays search

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

111100010011010

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

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

还是有另一种我忽略的简单方法吗?我能想到的只是复杂的非高效算法,它通过数组并将值保存在一个临时的其他数组中。

2 个答案:

答案 0 :(得分:2)

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

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

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

重复直到达到阵列结束。

完成。如果找到的最大长度为零,则意味着没有出现所寻求的值。

不,我不打算为上面写代码。这种方法的描述就足够了。

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

答案 1 :(得分:2)

仅供记录,另一种方法是使用std::search

#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

如果您的数组是标准容器,比如std :: array或vector,则更容易。