gpt4 book ai didi

C++检查 vector 中一行中有多少个相同元素

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:20 26 4
gpt4 key购买 nike

我有一个包含 24.000 个元素的大 vector ,例如:

(1,1,1,1,3,3,3,3,3,3,5,5,5,...etc)

我想检查一行中有多少相同的元素,例如:4-6-3..等我使用这段代码:

static int counter=1;
vector<int>numbers;

for(int n=0;n<numbers.size()-1;n++)
{
if(numbers[n]==numbers[n+1])
{
counter++;
}
else if(numbers[n]!=numbers[n+1])
{
cout<<counter<<endl;
counter=1;
}
}

是否有任何算法可以更快地完成同样的工作;

最佳答案

@rhalbersma 基本上给了你正确的答案。作为附录,如果您想以更标准的方式重写算法:

#include <algorithm>
#include <vector>
#include <iterator>
#include <functional>
#include <iostream>

int main()
{
std::vector<int> v { 1, 1, 2, 3, 3, 5, 5, 5 }; // or whatever...

auto i = begin(v);
while (i != end(v))
{
auto j = adjacent_find(i, end(v), std::not_equal_to<int>());
if (j == end(v)) { std::cout << distance(i, j); break; }
std::cout << distance(i, j) + 1 << std::endl;
i = next(j);
}
}

这是一个live example .

此外,当对 vector 进行排序时,这将为您提供更好的最佳情况复杂度:

#include <algorithm>
#include <vector>
#include <iterator>
#include <iostream>

int main()
{
std::vector<int> v { 1, 1, 2, 3, 3, 5, 5, 5 }; // must be sorted...

auto i = begin(v);
while (i != end(v))
{
auto ub = upper_bound(i, end(v), *i);
std::cout << distance(i, ub) << std::endl;
i = ub;
}
}

这是一个live example .

关于C++检查 vector 中一行中有多少个相同元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16438395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com