C ++向量Lower_bound函数无法正常运行

时间:2019-07-28 18:00:44

标签: c++ vector

我试图使用“ lower_bound”函数解决1099。Leetcode的两个S小于K问题。 我正在尝试找到最大数目A [j],这使A [i] + A [j]

示例1: 输入:A = [34,23,1,24,75,33,54,8],K = 60 输出:58 说明: 我们可以使用34和24求和,得出58小于60。

示例2” 输入:A = [10,20,30],K = 15 输出:-1 说明: 在这种情况下,不可能获得小于15的一对和。

int twoSumLessThanK(vector<int>& A, int K) {
        sort(A.begin(), A.end());
        int curMax = -1;
        for(int i = 0; i < A.size(); i++) {
            vector<int>::iterator low = lower_bound(begin(A), end(A), K - A[i]);
            if (low != A.end()) {
                curMax = max(curMax, *low + A[i]);
            }
        }
        return curMax;
}

1 个答案:

答案 0 :(得分:3)

您的逻辑是错误的,因为lower_bound将返回与您要搜索的值>=相同的结果。

这种代码变体有效

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int twoSumLessThanK(vector<int>& A, int K) {
        sort(A.begin(), A.end());
        int curMax = -1;
        for(int i = 0; i < A.size(); i++) {
            vector<int>::iterator low = upper_bound(begin(A), end(A), K - A[i]);
            if (low != A.begin()) {
                --low;
                curMax = max(curMax, *low + A[i]);
            }
        }
        return curMax;
}

int main()
{
    vector<int> x{34,23,1,24,75,33,54,8};
    cout << twoSumLessThanK(x, 60) << '\n';
    vector<int> y{10,20,30};
    cout << twoSumLessThanK(y, 15) << '\n';
}

即找到大于的元素,然后退后一步。