class Solution {
public:
int threeSumClosest(vector<int> &num, int target) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
sort(num.begin(),num.end());
int sum = num[0] + num[1] + num[2];
for (vector<int>::size_type i = 0; i < num.size() - 2; ++i)
{
if (num[i] > target && i > 0)
break;
int flag = 0;
vector<int>::size_type j = i + 1, k = num.size() - 1;
while (j < k)
{
int sum1 = num[i] + num[j] + num[k];
if (abs(sum1 - target) < abs(sum - target))
{
sum = sum1;
if (sum == target)
{
flag = 1;
break;
}
while (j < k && num[j] == num[j + 1])
++j;
while (k > j && num[k] == num[k - 1])
--k;
//注意,这里j和k不再移动,区别于3Sum
}
if (sum1 < target)
++j;
else
--k;
}
if (flag == 1)
{
break;
}
else
{
while (i < num.size() - 2 && num[i] == num[i + 1])
++i;
}
}
return sum;
}
};
LeetCode-3Sum Closest
最新推荐文章于 2024-07-25 11:38:39 发布