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;
    }
};
none
最后修改于:2024年02月04日 12:40

评论已关闭