LeetCode 16 最接近的三数之和
LeetCode 16 最接近的三数之和
https://leetcode.cn/problems/3sum-closest/
双指针加绝对值位运算
class Solution {
public:
int my_abs(int n)
{
int bits = sizeof(int) * 8 - 1;
return (n ^ (n >> bits)) - (n >> bits);
}
public:
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int res = nums[0] + nums[1] + nums[2];
for (auto i = nums.begin(); i != nums.end(); i++)
{
//双指针
auto start = i + 1;
auto end = nums.end() - 1;
while (start < end) {
int mysum = *start + *end + *i;
if (my_abs(target - mysum) < my_abs(target - res))
res = mysum;
if (mysum > target)
end--;
else if (mysum < target)
start++;
else
return res;
}
}
return res;
}
};
评论已关闭