n^3的做法.把所有情况都列举出来
class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
int n = num.size();
if(n < 3)
return -1;
int limit = INT_MAX;//接近程度,初始为INT最大值
int res = 0;
for(int i = 0; i <= n - 3; i++){
for(int j = i + 1; j <= n - 2; j++){
for(int k = j +1; k <= n - 1; k++){
int sum = num[i] + num[j] + num[k];
if(abs(sum - target) < limit){
limit = abs(sum - target);
res = sum;
}
}
}
}
return res;
}
};
n^2做法。先排序。
class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
int n = num.size();
if(n < 3)
return -1;
int limit = INT_MAX;//接近程度,初始为INT最大值
int res = -1;
sort(num.begin(), num.end() );
for(int i = 0; i <= n- 3; i++){
int next = i +1;//指向当前的下一个
int last = n - 1;//指向尾部
while(next < last){
int sum = num[i] + num[next] + num[last];//当前和
if(abs(sum - target) < limit){//比较接近
limit = abs(sum - target);
res = sum;
}
if(sum < target)//小于目标就next++,寻找更大的和
next++;
else//大于或者等于的时候就缩小,寻找更小的和
last--;
}
}
return res;
}
};