整数对列表中的最大数字

时间:2014-12-13 04:46:27

标签: c++

我有一对对整数列表,试图找到重叠对的最大数量。

例如,(1,4),(2,5),(3,6)返回3; 另一个例子(1,4)(2,8)(5,6)返回2;

我正在考虑用第一个整数(较小的第一个)和断开的领带(较大的第二个)对这些对进行排序,我在开头放置了最宽的对。然后从第一对开始找到与其余部分的重叠,每次更新重叠直到找到最大计数。然后继续第二对......然后找到最大计数。 O(N ^ 2)

我不确定这是否有效。

这里有任何想法或更好的算法吗?

1 个答案:

答案 0 :(得分:1)

这将取第二个元素的最大值,并返回给定最大第二个元素的第一个元素。如果您想要不同的内容,请更新您的问题以澄清:

#include <algorithm>
#include <iostream>
#include <vector>
#include <utility>

bool choose_second(const std::pair<int, int> &lhs,
                   const std::pair<int, int> &rhs) {
    return lhs.second < rhs.second ;
}

int main(int argc, char *argv[]) {
    std::vector<std::pair<int,int> > v1 = {
        std::make_pair(1, 4),
        std::make_pair(2, 5),
        std::make_pair(3, 6)
    };

    std::vector<std::pair<int,int> > v2 = {
        std::make_pair(1, 4),
        std::make_pair(2, 8),
        std::make_pair(5, 6)
    };

    auto max1 = std::max_element(v1.begin(), v1.end(), choose_second);
    auto max2 = std::max_element(v2.begin(), v2.end(), choose_second);

    std::cout << max1->first
              << std::endl
              << max2->first
              << std::endl;
}