Thursday, February 6, 2014

[twitter] Given an array with numbers, your task is to find 4 numbers that will satisfy this equation: A + B + C = D


Given an array with numbers, your task is to find 4 numbers that will satisfy this equation:
A + B + C = D

vector<int> find3sum(vector<int> &num, int target){
    vector<int> res1;
    for(int i = 0; i < num.size(); ++i){
        if(i && num[i] == num[i-1]) continue;
        int j = i+1;
        for(int k = num.size() -1; k > j; --k){
            if(k < num.size() -1 && num[k] == num[k+1]) continue;
            while(j < k && num[i] + num[j] + num[k] < target)
                 ++j;
            if(j < k && num[i] + num[j] + num[k] == target){
                int a[] = {num[i],num[j],num[k]};
                vector<int> res(a, a+3);
                return res;
            }
        }
    }
    return res1;
}
  
vector<int> findABCD(int a[], int n){
    vector<int> res;
    if(n < 0) return res;
    vector<int> num(a, a+n);
    sort(num.begin(), num.end());
    while(num.size() > 3){
        int target = num.back();
        num.pop_back();
        vector<int> res = find3sum(num, target);
        if(!res.empty()){
            res.push_back(target);
            return res;
        }
    }
    return res;
}

No comments:

Post a Comment