假设我有这个单独整数元素的整数数组:
111100010011010
我想知道此数组中是否存在0000
,但显然不存在,000
存在。其他长度的连续运行也是如此。
我知道这很容易用字符串完成,有内置的函数,但有没有内置的东西可以完成我想做的事情?
还是有另一种我忽略的简单方法吗?我能想到的只是复杂的非高效算法,它通过数组并将值保存在一个临时的其他数组中。
答案 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,则更容易。