1. 程式人生 > >#Leetcode# 16. 3Sum Closest

#Leetcode# 16. 3Sum Closest

https://leetcode.com/problems/3sum-closest/

 

Given an array nums of n integers and an integer target, find three integers in nums such that the sum is closest to target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

Example:

Given array nums = [-1, 2, 1, -4], and target = 1.

The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

程式碼:

class Solution {
public:
    int threeSumClosest(vector<int>& nums, int target) {
        int n = nums.size();
        sort(nums.begin(), nums.end());
        int out = nums[0] + nums[1] + nums[2];
        int minn = abs(target - out);
        
        for(int i = 0; i < n - 2; i ++) {
            int l = i + 1, r = n - 1;
            while(l < r) {
                int num = nums[i] + nums[l] + nums[r];
                if(minn > abs(num - target)) {
                    minn = abs(num - target);
                    out = num;
                }
                
                if(num > target) r --;
                else l ++;
            }
        }
        return out;
    }
};

這個題目和上一個 $3Sum$ 差不多的 都是 $O(n^2)$ 的時間複雜度 因為各種小細節的錯誤 WA 了很多次 但是用和上一個一樣的寫法寫錯了 沒找出來哪裡有問題 改好之後再貼出來 嘻嘻

 

☺好像變成了一個愛碎碎唸的 be 主