您的位置:首页 > 其它

leetcode16. 3Sum Closest

2017-11-03 10:48 417 查看
思路:

利用2sum方法来做,最接近就是相差绝对值当前最小

class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
vector<int>::iterator iter = nums.begin();
vector<int>::iterator iter_end = nums.end();
long long int threeSumValue = 0;
long long int temp = 0;
long long int threeSumGap = INT_MIN;
threeSumGap *=  - 1;
while (iter != iter_end) {
temp = *iter + twoSum(nums, target - *iter, iter - nums.begin());
if (abs(temp - target) < threeSumGap) {
threeSumGap = abs(temp - target);
threeSumValue = temp;
}

iter++;
}

return threeSumValue;
}

int twoSum(vector<int> numsCopy, int target, int pos) {
numsCopy.erase(numsCopy.begin() + pos);
sort(numsCopy.begin(), numsCopy.end());

//copy(numsCopy.begin(), numsCopy.end(), ostream_iterator<int>(cout, "\n"));
vector<int>::iterator iter = numsCopy.begin();
vector<int>::iterator iter_end = numsCopy.end();
vector<int>::iterator left = iter;
long long  int gap = INT_MIN;
gap *= -1;
long long  int temp = 0;
iter_end--;
vector<int>::iterator right = iter_end;
while (iter != iter_end) {

temp = *iter + *iter_end - target;
if (temp<0) {
if (abs(temp)<gap) {
left = iter;
right = iter_end;
gap = abs(temp);
}
++iter;
}
else if (temp>0) {
if (abs(temp)<gap) {
left = iter;
right = iter_end;
gap = abs(temp);
}
iter_end--;
}
else {

left = iter;
right = iter_end;
gap = 0;

break;
}
}

return *left + *right;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode