Question:
Given an arraySOfNIntegers, find three integers inSSuch that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input wowould have exactly one solution.
Array
Experience:
1. The most direct idea for this question is definitely the a3n solution, which is to traverse all possible three numbers and then find the result. But this is the a3n = N (n-1) (n-2) = O (N3) solution, will exceed time limit.
2. The solution is less than three times.
class Solution { public: int threeSumClosest(vector<int> &num, int target) { // we don‘t want to change the original vector probably // how to declare vector in C++ vector<int> v(num.begin(), num.end()); int result = 0; int size = v.size(); if (size <= 3) { for (int i = 0; i < size; i++){ result += v[i]; } return result; } std::sort(v.begin(), v.end()); result = v[0] + v[1] + v[2]; int sum = 0; for (int i = 0; i < size - 2; i++) { int j = i + 1; int k = size - 1; while (j < k) { sum = v[i] + v[j] + v[k]; if (std::abs(target - sum) < std::abs(target - result)) { result = sum; if (result == target) { return result; } } if (sum > target) { k--; } else { j++; } } } return result; }};
[Leetcode] 3sum closest