Skip to content

Latest commit

 

History

History
33 lines (32 loc) · 1.18 KB

16. 3Sum Closest.md

File metadata and controls

33 lines (32 loc) · 1.18 KB

思路

类似15. 3Sum,先对数组进行排序,外层循环就是遍历一遍数组,内层循环就是用两个指针low和high,与3sum不同的就是 每次循环要判断记录当前sum和target的差值。 时间复杂度O(n^2)

C++

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int len = nums.size();
        long long res=nums[0] + nums[1] + nums[2], min_gap, sum, curr_gap; // 防止溢出所以用long long型
        min_gap = abs(res - target);
        sort(nums.begin(), nums.end());
        for(int i = 0; i < len - 2; i++){
            int low = i + 1, high = len - 1;
            while(low < high){
                sum = nums[i] + nums[low] + nums[high];
                curr_gap = abs(sum - target);
                if(curr_gap < min_gap){
                    res = sum;
                    min_gap = curr_gap;
                } 
                if(target < sum) high--;
                else if(target > sum) low++;
                else return target;
            } // low == high
        }
        return res;   
    }
};