c++ - 获得两个 vector 之间最大差异的最快方法

标签 c++ vector stl

我想获得一些想法,以找到一种快速方法来获得 2 个 vector 之间的最大差异就好像它们是累积的

例如,(还未累计)

vector<int> vec1 = {10, 30, 20, 40 };
vector<int> vec2 = {5, 10, 5, 8 };

获得结果的简单方法是先将它们累加到新的 vector 中,这样:

vector<int> accumulated_vec1 = {10, 10+30, 10+30+20, 10+30+20+40};
vector<int> accumulated_vec2 = {5, 5+10, 5+10+5, 5+10+5+8};

即:

accumulated_vec1 = {10,40,60,100};
accumulated_vec2 = {5,15,20,28};

然后,结果是 abs(accumulated_vec1[i]-accumulated_vec2[i]) 和 0 <= i <= 3 之间的最大值。

所以 result = 72(当 i==3 时)

更快的方法是用 1 个数字(甚至 0.10302040)表示 vector ...但我发现它没有帮助:\认为我有数百万对 2 个 vector vec1 和 vec2,我正在尝试避免计算每一对的累积 vector 。如果不清楚,请见谅,但如果我找到解决方案,我会回答这个恼人的问题。

最佳答案

最快的方法...

int maxDiff(const vector<int> &v1, const vector<int> &v2) {
    int maxDiff(0), diff(0);

    for (auto it1 = v1.begin(), it2 = v2.begin(); it1 != v1.end() && it2 != v2.end(); ++it1, ++it2) {
        diff += *it1-*it2;
        maxDiff = max(abs(diff), maxDiff);
    }

    return maxDiff;
}

没有其他 vector 构造,只是移动指针,这比每次根据索引获取元素更快。

Live Demo

关于c++ - 获得两个 vector 之间最大差异的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37460733/

相关文章:

c++ - 如何在 map 中实现终点?

c++ - 当用于指向字符串时,指向 char 的指针是否会覆盖内存?

c++ - 如何从文件读取和写入 AES key ?

c++ - vector 的 std::copy 无法正常工作

c++ - 选中的 QRadioButton 给出访问冲突读取位置 0xCDCDCDD1

c++ - 我可以进行异步 ODBC 调用吗?有引用资料吗?

c++ - 在 for range 循环中迭代包含 vector 的取消引用的 unique_ptr

c++ - 使用 vector 构造函数分配动态内存

c++ - 确定两个 vector 是否包含两个相同的相邻项

c++ - 在 C++11 中使用的前向声明