更多LeetCode题解
Brute Force
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
if (nums.size() < 3) { return 0; }
int distance = abs(nums[0] + nums[1] + nums[2] - target);
int res = nums[0] + nums[1] + nums[2];
for (int i = 0; i < nums.size(); i++) {
for (int j = i + 1; j < nums.size(); j++) {
for (int k = j + 1; k < nums.size(); k++) {
if (abs(nums[i] + nums[j] + nums[k] - target) < distance) {
distance = abs(nums[i] + nums[j] + nums[k] - target);
res = nums[i] + nums[j] + nums[k];
}
}
}
}
return res;
}
};
与15题一样采用双指针
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
if (nums.size() < 3) { return 0; }
sort(nums.begin(), nums.end());
int distance = abs(nums[0] + nums[1] + nums[2] - target);
int res = nums[0] + nums[1] + nums[2];
for (int i = 0; i < nums.size() - 2; i++) {
int low = i + 1, high = nums.size() - 1;
int target_2sum = target - nums[i];
while (low < high) {
if (abs(nums[low] + nums[high] - target_2sum) < distance) {
distance = abs(nums[low] + nums[high] - target_2sum);
res = nums[i] + nums[low] + nums[high];
}
if (nums[low] + nums[high] < target_2sum) {
low++;
}
else {
high--;
}
}
}
return res;
}
};