在int数组中查找连续的值

Find runs of consecutive values in int array

本文关键字:连续 查找 int 数组      更新时间:2023-10-16

假设我有一个整数数组,里面有独立的整数元素:

111100010011010

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

我知道这很容易用字符串完成,有内置的函数,但是有一些内置的东西来完成我想做的吗?

还是我忽略了另一个简单的方法?我所能想到的是复杂的低效算法遍历数组并将值保存在临时的其他数组中。

不需要将值保存到临时数组

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

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

重复,直到到达数组的末尾。

。如果找到的最大长度为零,则表示没有出现所查找的值。

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

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

为了记录,另一种方法是使用use 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)就更容易了。