File tree Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution {
2+ public:
3+ int threeSumClosest (vector<int >& nums, int target) {
4+
5+ int ans = numeric_limits<int >::max ();
6+ int min_diff = numeric_limits<int >::max ();
7+
8+ if (nums.size () < 3 ) {
9+ return ans;
10+ }
11+
12+ // Make nums in increasing order. Time: O(nlogn)
13+ sort (nums.begin (), nums.end ());
14+
15+ for (int i = 0 ; i < nums.size () - 2 ; ++i) {
16+ if (i == 0 || nums[i] != nums[i - 1 ]) { // Skip duplicated.
17+ for (int j = i + 1 , k = nums.size () - 1 ; j < k; ) { // Time: O(n) for each i.
18+ if (j - 1 > i && nums[j] == nums[j - 1 ]) { // Skip duplicated.
19+ ++j;
20+ } else if (k + 1 < nums.size () && nums[k] == nums[k + 1 ]) { // Skip duplicated.
21+ --k;
22+ } else {
23+ const auto sum = nums[i] + nums[j] + nums[k];
24+ if (sum > target) { // Should decrease sum.
25+ --k;
26+ } else if (sum < target) { // Should increase sum.
27+ ++j;
28+ } else {
29+ return target;
30+ }
31+
32+ if (abs (sum - target) < min_diff) {
33+ min_diff = abs (sum - target);
34+ ans = sum;
35+ }
36+ }
37+ }
38+ }
39+ }
40+
41+ return ans;
42+ }
43+ };
You can’t perform that action at this time.
0 commit comments