/*
题意:找出给定数组中包含三个元素,其和最接近目标值的和
分析:基于15的思路,在第二重利用双指针,如果sum=target,则直接返回答案,如果sum>target,则右指针左移,否则左指针右移
************
这里有一个精简代码的方法可以去记忆*
auto update = [&](int cur){。}; *
*
*
*
*/
int threeSum(vector<int>& nums, int target) {
int ans=1<<30;//minsum表示目前的结果与target的最小距离
int n = nums.size();
sort(nums.begin(), nums.end());
auto update = [&](int cur) {
if (abs(cur - target) < abs(ans - target)) {
ans = cur;
}
};
for (int a = 0; a < n; ++a) {
if (a > 0 && nums[a] == nums[a - 1]) continue;
int b = a + 1, c = n - 1;
while (b < c) {
int sum = nums[a] + nums[b] + nums[c];
update(sum);
if (sum == target) return sum;
if (sum > target) {
int c0 = c-1;
while (b < c0&&nums[c0] == nums[c]) --c0;
c = c0;
}
else {
int b0 = b + 1;
while (b0 < c&&nums[b0] == nums[b]) ++b0;
b = b0;
}
}
}
return ans;
}
数组16
最新推荐文章于 2022-07-17 17:22:52 发布