在int数组中查找连续的值
Find runs of consecutive values in int array
假设我有一个整数数组,里面有独立的整数元素:
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)就更容易了。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 模板元程序查找相似的连续类型名称
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 使用连续字符及其路径查找矩阵中最长路径的长度
- 查找给定范围内最长连续 1 的频率
- 查找连续子数组的第二小和
- 用于查找连续子数组的最大总和的代码使测试用例失败
- 在随机生成的数组中查找重复的连续数字
- 查找给定数组中长度为 k 的所有连续子数组的总和
- 在序列中查找相似的数字并记录最大连续连胜
- 查找n连续字符的函数返回true/false
- 在 char 数组中查找最多 6 个连续 0 位的最快方法
- 在数组中查找 y 的 x 个连续值的最有效方法是什么?
- 查找最大和连续子数组-另一个版本
- 用于搜索位阵列以查找连续设置/清除位的快速代码
- 查找序列中给定长度的所有连续子序列的最有效算法
- 查找连续的子数组(没有和)
- 在int数组中查找连续的值
- 在连续重复元素的数组中查找单个元素
- 查找具有最大和的连续子数组