function threeSumClosestBrute(nums, target) {
const n = nums.length;
let closestSum = nums[0] + nums[1] + nums[2];
for (let i = 0; i < n - 2; i++) {
for (let j = i + 1; j < n - 1; j++) {
for (let k = j + 1; k < n; k++) {
const currSum = nums[i] + nums[j] + nums[k];
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum;
}
}
}
}
return closestSum;
}
console.log(threeSumClosestBrute([-1,2,1,-4],1));
console.log(threeSumClosestBrute([0,0,0],1));
console.log(threeSumClosestBrute([1,1,1,1],3));
// Brute-force 3Sum Closest (LC16) - JavaScript
// Time Complexity: O(n^3), Space Complexity: O(1) extra
// Purpose: Baseline correctness demonstration
/**
* Finds 3Sum closest to target using brute-force.
* @param {number[]} nums - input array
* @param {number} target - target sum
* @returns {number} closest sum
*/
function threeSumClosestBrute(nums, target) {
const n = nums.length;
let closestSum = nums[0] + nums[1] + nums[2]; // initialize
for (let i = 0; i < n - 2; i++) {
for (let j = i + 1; j < n - 1; j++) {
for (let k = j + 1; k < n; k++) {
const currSum = nums[i] + nums[j] + nums[k];
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum; // update closest sum
}
}
}
}
return closestSum;
}
// Example test cases
console.log(threeSumClosestBrute([-1,2,1,-4],1)); // 2
console.log(threeSumClosestBrute([0,0,0],1)); // 0
console.log(threeSumClosestBrute([1,1,1,1],3)); // 3
/*
COMMENTS — Brute:
- Triple nested loops to test all triplets i<j<k.
- Track closest sum using absolute difference.
- Time: O(n^3), Space: O(1) extra.
- Edge cases handled naturally: duplicates, negative numbers, zeros.
- Use in interviews to demonstrate correctness before optimization.
- JS tip: Always consider edge cases like empty array or n<3.
*/
function threeSumClosest(nums, target) {
nums.sort((a,b) => a-b);
const n = nums.length;
let closestSum = nums[0] + nums[1] + nums[2];
for (let i = 0; i < n-2; i++) {
let left = i + 1;
let right = n - 1;
while (left < right) {
const currSum = nums[i] + nums[left] + nums[right];
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum;
}
if (currSum < target) {
left++;
} else if (currSum > target) {
right--;
} else {
return target;
}
}
}
return closestSum;
}
console.log(threeSumClosest([-1,2,1,-4],1));
console.log(threeSumClosest([0,0,0],1));
console.log(threeSumClosest([1,1,1,1],3));
// Optimized 3Sum Closest (LC16) - JavaScript
// Time Complexity: O(n^2), Space Complexity: O(1)
// Approach: Sort + Two Pointers
/**
* Finds 3Sum closest to target using sort + two-pointer approach.
* @param {number[]} nums - input array
* @param {number} target - target sum
* @returns {number} closest sum
*/
function threeSumClosest(nums, target) {
nums.sort((a,b) => a-b); // sort for two-pointer
const n = nums.length;
let closestSum = nums[0] + nums[1] + nums[2];
for (let i = 0; i < n-2; i++) {
let left = i + 1;
let right = n - 1;
while (left < right) {
const currSum = nums[i] + nums[left] + nums[right];
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum;
}
if (currSum < target) {
left++; // increase sum
} else if (currSum > target) {
right--; // decrease sum
} else {
return target; // exact match
}
}
}
return closestSum;
}
// Example tests
console.log(threeSumClosest([-1,2,1,-4],1)); // 2
console.log(threeSumClosest([0,0,0],1)); // 0
console.log(threeSumClosest([1,1,1,1],3)); // 3
/*
COMMENTS — Optimized:
- Sort + two-pointer reduces complexity from O(n^3) -> O(n^2).
- left/right pointer movement: left++ if sum < target, right-- if sum > target.
- Early exit if exact match found.
- Edge cases handled naturally: duplicates, zeros, negative numbers.
- JS extra notes:
* Be careful with floating point numbers in JS: Math.abs(currSum-target)
* Explain dry-run to interviewer with small arrays.
* Can show intermediate pointer movement and sum updates for clarity.
- Space: O(1) extra besides input array.
- Interview tip: explain how sorting enables two-pointer approach.
*/
from typing import List
import sys
def threeSumClosestBrute(nums: List[int], target: int) -> int:
"""
Triple nested loops to check all triplets and find the sum closest to target.
Steps:
1. Iterate all i < j < k combinations
2. Calculate current sum = nums[i] + nums[j] + nums[k]
3. Keep track of closest sum to target
4. Return the closest sum
"""
n = len(nums)
closest_sum = None
min_diff = sys.maxsize
for i in range(n-2):
for j in range(i+1, n-1):
for k in range(j+1, n):
curr_sum = nums[i] + nums[j] + nums[k]
diff = abs(curr_sum - target)
if diff < min_diff:
min_diff = diff
closest_sum = curr_sum
return closest_sum
print(threeSumClosestBrute([-1,2,1,-4], 1))
print(threeSumClosestBrute([0,0,0], 1))
print(threeSumClosestBrute([1,1,1,1], 3))
"""
COMMENTS — Brute:
- Triple nested loops check all combinations i<j<k.
- Track minimum difference between sum and target.
- Step-by-step: calculate sum -> check if closer -> update closest_sum.
- Time: O(n^3), Space: O(1) extra besides result variable.
- Useful in interviews to show baseline correctness.
- Edge cases: multiple zeros, negative numbers, repeated elements.
"""
# Brute-force 3Sum Closest (LC16) - Python
# Time Complexity: O(n^3), Space Complexity: O(1) extra
# Purpose: Demonstrate baseline correctness for interviews
from typing import List
import sys
def threeSumClosestBrute(nums: List[int], target: int) -> int:
"""
Triple nested loops to check all triplets and find the sum closest to target.
Steps:
1. Iterate all i < j < k combinations
2. Calculate current sum = nums[i] + nums[j] + nums[k]
3. Keep track of closest sum to target
4. Return the closest sum
"""
n = len(nums)
closest_sum = None
min_diff = sys.maxsize
for i in range(n-2):
for j in range(i+1, n-1):
for k in range(j+1, n):
curr_sum = nums[i] + nums[j] + nums[k]
diff = abs(curr_sum - target)
if diff < min_diff:
min_diff = diff
closest_sum = curr_sum
return closest_sum
# Test cases
print(threeSumClosestBrute([-1,2,1,-4], 1)) # Expected: 2
print(threeSumClosestBrute([0,0,0], 1)) # Expected: 0
print(threeSumClosestBrute([1,1,1,1], 3)) # Expected: 3
"""
COMMENTS — Brute:
- Triple nested loops check all combinations i<j<k.
- Track minimum difference between sum and target.
- Step-by-step: calculate sum -> check if closer -> update closest_sum.
- Time: O(n^3), Space: O(1) extra besides result variable.
- Useful in interviews to show baseline correctness.
- Edge cases: multiple zeros, negative numbers, repeated elements.
"""
from typing import List
def threeSumClosest(nums: List[int], target: int) -> int:
"""
Steps:
1. Sort the array
2. Iterate with first pointer i
3. Use two pointers left=i+1 and right=n-1
4. Calculate sum, compare diff with closest_sum
5. Move pointers based on sum < target or sum > target
"""
nums.sort()
n = len(nums)
closest_sum = nums[0] + nums[1] + nums[2]
for i in range(n-2):
left, right = i+1, n-1
while left < right:
curr_sum = nums[i] + nums[left] + nums[right]
if abs(curr_sum - target) < abs(closest_sum - target):
closest_sum = curr_sum
if curr_sum < target:
left += 1
elif curr_sum > target:
right -= 1
else:
return target
return closest_sum
print(threeSumClosest([-1,2,1,-4], 1))
print(threeSumClosest([0,0,0], 1))
print(threeSumClosest([1,1,1,1], 3))
"""
COMMENTS — Optimized:
- Sorting enables two-pointer approach for O(n^2) time.
- Closest sum is tracked at each step.
- Move left/right pointers depending on sum vs target.
- Time: O(n^2), Space: O(1) extra besides input.
- Edge cases handled naturally: duplicates, negatives, multiple zeros.
- Interview tip: explain why sorting + two pointers reduces complexity.
"""
# Optimized 3Sum Closest (LC16) - Python
# Time Complexity: O(n^2), Space Complexity: O(1) extra
# Approach: Sorting + Two Pointers
from typing import List
def threeSumClosest(nums: List[int], target: int) -> int:
"""
Steps:
1. Sort the array
2. Iterate with first pointer i
3. Use two pointers left=i+1 and right=n-1
4. Calculate sum, compare diff with closest_sum
5. Move pointers based on sum < target or sum > target
"""
nums.sort()
n = len(nums)
closest_sum = nums[0] + nums[1] + nums[2] # initialize with first triplet
for i in range(n-2):
left, right = i+1, n-1
while left < right:
curr_sum = nums[i] + nums[left] + nums[right]
# Update closest_sum if current sum is closer to target
if abs(curr_sum - target) < abs(closest_sum - target):
closest_sum = curr_sum
if curr_sum < target:
left += 1 # need larger sum
elif curr_sum > target:
right -= 1 # need smaller sum
else:
return target # exact match
return closest_sum
# Test cases
print(threeSumClosest([-1,2,1,-4], 1)) # Expected: 2
print(threeSumClosest([0,0,0], 1)) # Expected: 0
print(threeSumClosest([1,1,1,1], 3)) # Expected: 3
"""
COMMENTS — Optimized:
- Sorting enables two-pointer approach for O(n^2) time.
- Closest sum is tracked at each step.
- Move left/right pointers depending on sum vs target.
- Time: O(n^2), Space: O(1) extra besides input.
- Edge cases handled naturally: duplicates, negatives, multiple zeros.
- Interview tip: explain why sorting + two pointers reduces complexity.
"""
import java.util.*;
public class ThreeSumClosestBrute {
public static int threeSumClosest(int[] nums, int target) {
int n = nums.length;
int closestSum = nums[0] + nums[1] + nums[2];
for (int i = 0; i < n-2; i++) {
for (int j = i+1; j < n-1; j++) {
for (int k = j+1; k < n; k++) {
int currSum = nums[i] + nums[j] + nums[k];
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum;
}
}
}
}
return closestSum;
}
public static void main(String[] args) {
System.out.println(threeSumClosest(new int[]{-1,2,1,-4}, 1));
System.out.println(threeSumClosest(new int[]{0,0,0}, 1));
System.out.println(threeSumClosest(new int[]{1,1,1,1}, 3));
}
}
// Brute-force 3Sum Closest (LC16) - Java
// Time Complexity: O(n^3), Space Complexity: O(1) extra
// Purpose: Demonstrate baseline correctness for interviews
import java.util.*;
public class ThreeSumClosestBrute {
public static int threeSumClosest(int[] nums, int target) {
int n = nums.length;
int closestSum = nums[0] + nums[1] + nums[2]; // initial sum
for (int i = 0; i < n-2; i++) {
for (int j = i+1; j < n-1; j++) {
for (int k = j+1; k < n; k++) {
int currSum = nums[i] + nums[j] + nums[k];
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum;
}
}
}
}
return closestSum;
}
public static void main(String[] args) {
System.out.println(threeSumClosest(new int[]{-1,2,1,-4}, 1)); // 2
System.out.println(threeSumClosest(new int[]{0,0,0}, 1)); // 0
System.out.println(threeSumClosest(new int[]{1,1,1,1}, 3)); // 3
}
}
/*
COMMENTS — Brute:
- Triple nested loops check all triplets.
- Track closest sum by comparing absolute difference with target.
- Step-by-step: iterate -> compute sum -> update closestSum if better.
- Time: O(n^3), Space: O(1) extra.
- Useful in interviews to show baseline solution.
- Edge cases: repeated numbers, multiple zeros, negatives.
*/
import java.util.*;
public class ThreeSumClosestOptimized {
public static int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int n = nums.length;
int closestSum = nums[0] + nums[1] + nums[2];
for (int i = 0; i < n-2; i++) {
int left = i+1;
int right = n-1;
while (left < right) {
int currSum = nums[i] + nums[left] + nums[right];
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum;
}
if (currSum < target) {
left++;
} else if (currSum > target) {
right--;
} else {
return target;
}
}
}
return closestSum;
}
public static void main(String[] args) {
System.out.println(threeSumClosest(new int[]{-1,2,1,-4}, 1));
System.out.println(threeSumClosest(new int[]{0,0,0}, 1));
System.out.println(threeSumClosest(new int[]{1,1,1,1}, 3));
}
}
// Optimized 3Sum Closest (LC16) - Java
// Time Complexity: O(n^2), Space Complexity: O(1) extra
// Approach: Sorting + Two Pointers
import java.util.*;
public class ThreeSumClosestOptimized {
public static int threeSumClosest(int[] nums, int target) {
Arrays.sort(nums);
int n = nums.length;
int closestSum = nums[0] + nums[1] + nums[2]; // initialize
for (int i = 0; i < n-2; i++) {
int left = i+1;
int right = n-1;
while (left < right) {
int currSum = nums[i] + nums[left] + nums[right];
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum;
}
if (currSum < target) {
left++; // need larger sum
} else if (currSum > target) {
right--; // need smaller sum
} else {
return target; // exact match
}
}
}
return closestSum;
}
public static void main(String[] args) {
System.out.println(threeSumClosest(new int[]{-1,2,1,-4}, 1)); // 2
System.out.println(threeSumClosest(new int[]{0,0,0}, 1)); // 0
System.out.println(threeSumClosest(new int[]{1,1,1,1}, 3)); // 3
}
}
/*
COMMENTS — Optimized:
- Sorting + two-pointer approach reduces time to O(n^2).
- Closest sum updated whenever current sum is nearer to target.
- Edge cases: repeated elements, negative numbers, multiple zeros.
- Space: O(1) extra besides input.
- Interview tip: explain sorting + two pointer movement logic.
*/
#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
int threeSumClosestBrute(vector<int>& nums, int target) {
int n = nums.size();
int closestSum = nums[0] + nums[1] + nums[2];
for (int i = 0; i < n - 2; i++) {
for (int j = i + 1; j < n - 1; j++) {
for (int k = j + 1; k < n; k++) {
int currSum = nums[i] + nums[j] + nums[k];
if (abs(currSum - target) < abs(closestSum - target)) {
closestSum = currSum;
}
}
}
}
return closestSum;
}
int main() {
vector<int> nums1 = {-1,2,1,-4};
vector<int> nums2 = {0,0,0};
vector<int> nums3 = {1,1,1,1};
cout << threeSumClosestBrute(nums1, 1) << endl;
cout << threeSumClosestBrute(nums2, 1) << endl;
cout << threeSumClosestBrute(nums3, 3) << endl;
return 0;
}
// Brute-force 3Sum Closest (LC16) - C++
// Time Complexity: O(n^3), Space Complexity: O(1) extra
// Purpose: Baseline correctness demonstration for interviews
#include <iostream>
#include <vector>
#include <cstdlib> // for abs
using namespace std;
int threeSumClosestBrute(vector<int>& nums, int target) {
int n = nums.size();
int closestSum = nums[0] + nums[1] + nums[2]; // initialize
for (int i = 0; i < n - 2; i++) {
for (int j = i + 1; j < n - 1; j++) {
for (int k = j + 1; k < n; k++) {
int currSum = nums[i] + nums[j] + nums[k];
if (abs(currSum - target) < abs(closestSum - target)) {
closestSum = currSum;
}
}
}
}
return closestSum;
}
int main() {
vector<int> nums1 = {-1,2,1,-4};
vector<int> nums2 = {0,0,0};
vector<int> nums3 = {1,1,1,1};
cout << threeSumClosestBrute(nums1, 1) << endl; // 2
cout << threeSumClosestBrute(nums2, 1) << endl; // 0
cout << threeSumClosestBrute(nums3, 3) << endl; // 3
return 0;
}
/*
COMMENTS — Brute:
- Triple loops check all triplets.
- Track closest sum via absolute difference.
- Time: O(n^3), Space: O(1) extra.
- Edge cases: repeated numbers, multiple zeros, negative values.
- Good baseline for explaining correctness in interviews.
*/
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
using namespace std;
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end());
int n = nums.size();
int closestSum = nums[0] + nums[1] + nums[2];
for (int i = 0; i < n - 2; i++) {
int left = i + 1;
int right = n - 1;
while (left < right) {
int currSum = nums[i] + nums[left] + nums[right];
if (abs(currSum - target) < abs(closestSum - target)) {
closestSum = currSum;
}
if (currSum < target) {
left++;
} else if (currSum > target) {
right--;
} else {
return target;
}
}
}
return closestSum;
}
int main() {
vector<int> nums1 = {-1,2,1,-4};
vector<int> nums2 = {0,0,0};
vector<int> nums3 = {1,1,1,1};
cout << threeSumClosest(nums1, 1) << endl;
cout << threeSumClosest(nums2, 1) << endl;
cout << threeSumClosest(nums3, 3) << endl;
return 0;
}
// Optimized 3Sum Closest (LC16) - C++
// Time Complexity: O(n^2), Space Complexity: O(1) extra
// Approach: Sorting + Two Pointers
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib> // for abs
using namespace std;
int threeSumClosest(vector<int>& nums, int target) {
sort(nums.begin(), nums.end()); // sort array
int n = nums.size();
int closestSum = nums[0] + nums[1] + nums[2]; // initialize
for (int i = 0; i < n - 2; i++) {
int left = i + 1;
int right = n - 1;
while (left < right) {
int currSum = nums[i] + nums[left] + nums[right];
if (abs(currSum - target) < abs(closestSum - target)) {
closestSum = currSum;
}
if (currSum < target) {
left++; // need larger sum
} else if (currSum > target) {
right--; // need smaller sum
} else {
return target; // exact match
}
}
}
return closestSum;
}
int main() {
vector<int> nums1 = {-1,2,1,-4};
vector<int> nums2 = {0,0,0};
vector<int> nums3 = {1,1,1,1};
cout << threeSumClosest(nums1, 1) << endl; // 2
cout << threeSumClosest(nums2, 1) << endl; // 0
cout << threeSumClosest(nums3, 3) << endl; // 3
return 0;
}
/*
COMMENTS — Optimized:
- Sorting + two-pointer approach reduces complexity from O(n^3) -> O(n^2).
- Update closest sum whenever current sum is closer to target.
- Pointer logic: move left for smaller sum, right for larger sum.
- Edge cases: duplicates, negative numbers, zeros handled naturally.
- Space: O(1) extra besides input.
- Interview tip: explain sorting enables two-pointer approach, reducing nested loops.
*/
using System;
public class ThreeSumClosestBrute
{
public static int ThreeSumClosest(int[] nums, int target)
{
int n = nums.Length;
int closestSum = nums[0] + nums[1] + nums[2];
for (int i = 0; i < n - 2; i++)
{
for (int j = i + 1; j < n - 1; j++)
{
for (int k = j + 1; k < n; k++)
{
int currSum = nums[i] + nums[j] + nums[k];
if (Math.Abs(currSum - target) < Math.Abs(closestSum - target))
{
closestSum = currSum;
}
}
}
}
return closestSum;
}
public static void Main()
{
Console.WriteLine(ThreeSumClosest(new int[] {-1,2,1,-4}, 1));
Console.WriteLine(ThreeSumClosest(new int[] {0,0,0}, 1));
Console.WriteLine(ThreeSumClosest(new int[] {1,1,1,1}, 3));
}
}
// Brute-force 3Sum Closest (LC16) - C#
// Time Complexity: O(n^3), Space Complexity: O(1) extra
// Purpose: Baseline correctness demonstration for interviews
using System;
public class ThreeSumClosestBrute
{
public static int ThreeSumClosest(int[] nums, int target)
{
int n = nums.Length;
int closestSum = nums[0] + nums[1] + nums[2]; // initialize with first triplet
// Triple nested loops to check all triplets
for (int i = 0; i < n - 2; i++)
{
for (int j = i + 1; j < n - 1; j++)
{
for (int k = j + 1; k < n; k++)
{
int currSum = nums[i] + nums[j] + nums[k];
if (Math.Abs(currSum - target) < Math.Abs(closestSum - target))
{
closestSum = currSum; // update if closer
}
}
}
}
return closestSum;
}
public static void Main()
{
Console.WriteLine(ThreeSumClosest(new int[] {-1,2,1,-4}, 1)); // 2
Console.WriteLine(ThreeSumClosest(new int[] {0,0,0}, 1)); // 0
Console.WriteLine(ThreeSumClosest(new int[] {1,1,1,1}, 3)); // 3
}
}
/*
COMMENTS — Brute:
- Triple loops check all possible triplets i<j<k.
- Closest sum tracked using absolute difference to target.
- Time: O(n^3), Space: O(1) extra.
- Useful to show baseline correctness in interviews.
- Edge cases: repeated elements, negative numbers, multiple zeros.
- Step-by-step explanation helps interviewers see candidate's reasoning.
*/
using System;
public class ThreeSumClosestOptimized
{
public static int ThreeSumClosest(int[] nums, int target)
{
Array.Sort(nums);
int n = nums.Length;
int closestSum = nums[0] + nums[1] + nums[2];
for (int i = 0; i < n - 2; i++)
{
int left = i + 1;
int right = n - 1;
while (left < right)
{
int currSum = nums[i] + nums[left] + nums[right];
if (Math.Abs(currSum - target) < Math.Abs(closestSum - target))
{
closestSum = currSum;
}
if (currSum < target)
{
left++;
}
else if (currSum > target)
{
right--;
}
else
{
return target;
}
}
}
return closestSum;
}
public static void Main()
{
Console.WriteLine(ThreeSumClosest(new int[] {-1,2,1,-4}, 1));
Console.WriteLine(ThreeSumClosest(new int[] {0,0,0}, 1));
Console.WriteLine(ThreeSumClosest(new int[] {1,1,1,1}, 3));
}
}
// Optimized 3Sum Closest (LC16) - C#
// Time Complexity: O(n^2), Space Complexity: O(1) extra
// Approach: Sorting + Two Pointers
using System;
public class ThreeSumClosestOptimized
{
public static int ThreeSumClosest(int[] nums, int target)
{
Array.Sort(nums); // sort array for two-pointer technique
int n = nums.Length;
int closestSum = nums[0] + nums[1] + nums[2]; // initialize
for (int i = 0; i < n - 2; i++)
{
int left = i + 1;
int right = n - 1;
while (left < right)
{
int currSum = nums[i] + nums[left] + nums[right];
// update closest sum if this triplet is closer
if (Math.Abs(currSum - target) < Math.Abs(closestSum - target))
{
closestSum = currSum;
}
if (currSum < target)
{
left++; // need larger sum
}
else if (currSum > target)
{
right--; // need smaller sum
}
else
{
return target; // exact match found
}
}
}
return closestSum;
}
public static void Main()
{
Console.WriteLine(ThreeSumClosest(new int[] {-1,2,1,-4}, 1)); // 2
Console.WriteLine(ThreeSumClosest(new int[] {0,0,0}, 1)); // 0
Console.WriteLine(ThreeSumClosest(new int[] {1,1,1,1}, 3)); // 3
}
}
/*
COMMENTS — Optimized:
- Sorting + two-pointer approach reduces time to O(n^2).
- Closest sum updated at each step if current sum is nearer to target.
- Pointer logic: move left for smaller sum, right for larger sum.
- Space: O(1) extra besides input.
- Edge cases handled naturally: duplicates, zeros, negative numbers.
- Interview tip: explain how sorting enables two-pointer reduction from O(n^3) to O(n^2).
*/
package main
import (
"fmt"
"math"
)
func threeSumClosestBrute(nums []int, target int) int {
n := len(nums)
closestSum := nums[0] + nums[1] + nums[2]
for i := 0; i < n-2; i++ {
for j := i + 1; j < n-1; j++ {
for k := j + 1; k < n; k++ {
currSum := nums[i] + nums[j] + nums[k]
if math.Abs(float64(currSum-target)) < math.Abs(float64(closestSum-target)) {
closestSum = currSum
}
}
}
}
return closestSum
}
func main() {
fmt.Println(threeSumClosestBrute([]int{-1, 2, 1, -4}, 1))
fmt.Println(threeSumClosestBrute([]int{0, 0, 0}, 1))
fmt.Println(threeSumClosestBrute([]int{1, 1, 1, 1}, 3))
}
// Brute-force 3Sum Closest (LC16) - Go
// Time Complexity: O(n^3), Space Complexity: O(1) extra
// Purpose: Baseline correctness demonstration for interviews
package main
import (
"fmt"
"math"
)
func threeSumClosestBrute(nums []int, target int) int {
n := len(nums)
closestSum := nums[0] + nums[1] + nums[2] // initialize with first triplet
// Triple nested loops to check all triplets i<j<k
for i := 0; i < n-2; i++ {
for j := i + 1; j < n-1; j++ {
for k := j + 1; k < n; k++ {
currSum := nums[i] + nums[j] + nums[k]
if math.Abs(float64(currSum-target)) < math.Abs(float64(closestSum-target)) {
closestSum = currSum // update closest sum if closer
}
}
}
}
return closestSum
}
func main() {
fmt.Println(threeSumClosestBrute([]int{-1, 2, 1, -4}, 1)) // 2
fmt.Println(threeSumClosestBrute([]int{0, 0, 0}, 1)) // 0
fmt.Println(threeSumClosestBrute([]int{1, 1, 1, 1}, 3)) // 3
}
/*
COMMENTS — Brute:
- Checks all possible triplets i<j<k to find sum closest to target.
- Tracks closest sum using absolute difference.
- Time Complexity: O(n^3), Space Complexity: O(1) extra.
- Edge cases handled: duplicates, zeros, negative numbers.
- Useful to demonstrate baseline correctness in interviews.
*/
package main
import (
"fmt"
"math"
"sort"
)
func threeSumClosest(nums []int, target int) int {
sort.Ints(nums)
n := len(nums)
closestSum := nums[0] + nums[1] + nums[2]
for i := 0; i < n-2; i++ {
left := i + 1
right := n - 1
for left < right {
currSum := nums[i] + nums[left] + nums[right]
if math.Abs(float64(currSum-target)) < math.Abs(float64(closestSum-target)) {
closestSum = currSum
}
if currSum < target {
left++
} else if currSum > target {
right--
} else {
return target
}
}
}
return closestSum
}
func main() {
fmt.Println(threeSumClosest([]int{-1, 2, 1, -4}, 1))
fmt.Println(threeSumClosest([]int{0, 0, 0}, 1))
fmt.Println(threeSumClosest([]int{1, 1, 1, 1}, 3))
}
// Optimized 3Sum Closest (LC16) - Go
// Time Complexity: O(n^2), Space Complexity: O(1) extra
// Approach: Sorting + Two Pointers
package main
import (
"fmt"
"math"
"sort"
)
func threeSumClosest(nums []int, target int) int {
sort.Ints(nums) // sort array for two-pointer technique
n := len(nums)
closestSum := nums[0] + nums[1] + nums[2] // initialize
for i := 0; i < n-2; i++ {
left := i + 1
right := n - 1
for left < right {
currSum := nums[i] + nums[left] + nums[right]
// Update closest sum if current sum is nearer to target
if math.Abs(float64(currSum-target)) < math.Abs(float64(closestSum-target)) {
closestSum = currSum
}
// Move pointers based on comparison with target
if currSum < target {
left++ // need larger sum
} else if currSum > target {
right-- // need smaller sum
} else {
return target // exact match found
}
}
}
return closestSum
}
func main() {
fmt.Println(threeSumClosest([]int{-1, 2, 1, -4}, 1)) // 2
fmt.Println(threeSumClosest([]int{0, 0, 0}, 1)) // 0
fmt.Println(threeSumClosest([]int{1, 1, 1, 1}, 3)) // 3
}
/*
COMMENTS — Optimized:
- Sort + two-pointer reduces complexity from O(n^3) -> O(n^2).
- Update closest sum when current sum is nearer to target.
- Pointer logic: left++ if sum < target, right-- if sum > target.
- Edge cases naturally handled: duplicates, negative numbers, zeros.
- Space Complexity: O(1) extra (besides input array).
- Interview tip: Explain how sorting enables two-pointer approach, reducing nested loops.
*/
function threeSumClosestBruteMethod(nums: number[], target: number): number {
const n = nums.length;
let closestSum = nums[0] + nums[1] + nums[2];
for (let i = 0; i < n - 2; i++) {
for (let j = i + 1; j < n - 1; j++) {
for (let k = j + 1; k < n; k++) {
const currSum = nums[i] + nums[j] + nums[k];
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum;
}
}
}
}
return closestSum;
}
console.log(threeSumClosestBrute([-1,2,1,-4],1));
console.log(threeSumClosestBrute([0,0,0],1));
console.log(threeSumClosestBrute([1,1,1,1],3));
// Brute-force 3Sum Closest (LC16) - TypeScript
// Time Complexity: O(n^3), Space Complexity: O(1)
function threeSumClosestBruteMethod(nums: number[], target: number): number {
const n = nums.length;
let closestSum = nums[0] + nums[1] + nums[2];
// Triple nested loops to try all triplets
for (let i = 0; i < n - 2; i++) {
for (let j = i + 1; j < n - 1; j++) {
for (let k = j + 1; k < n; k++) {
const currSum = nums[i] + nums[j] + nums[k];
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum;
}
}
}
}
return closestSum;
}
// Test cases
console.log(threeSumClosestBrute([-1,2,1,-4],1)); // 2
console.log(threeSumClosestBrute([0,0,0],1)); // 0
console.log(threeSumClosestBrute([1,1,1,1],3)); // 3
/*
COMMENTS — Brute:
- Checks all triplets for correctness.
- Handles duplicates, negative numbers, zeros.
- Time: O(n^3), Space: O(1)
- Good for interviews to show baseline understanding.
*/
function threeSumClosestOptimized(nums: number[], target: number): number {
nums.sort((a,b) => a-b);
const n = nums.length;
let closestSum = nums[0] + nums[1] + nums[2];
for (let i = 0; i < n - 2; i++) {
let left = i + 1;
let right = n - 1;
while (left < right) {
const currSum = nums[i] + nums[left] + nums[right];
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum;
}
if (currSum < target) {
left++;
} else if (currSum > target) {
right--;
} else {
return target;
}
}
}
return closestSum;
}
console.log(threeSumClosest([-1,2,1,-4],1));
console.log(threeSumClosest([0,0,0],1));
console.log(threeSumClosest([1,1,1,1],3));
// Optimized 3Sum Closest (LC16) - TypeScript
// Time Complexity: O(n^2), Space Complexity: O(1)
// Approach: Sort + Two Pointers
function threeSumClosestOptimized(nums: number[], target: number): number {
nums.sort((a,b) => a-b); // sort for two-pointer approach
const n = nums.length;
let closestSum = nums[0] + nums[1] + nums[2];
for (let i = 0; i < n - 2; i++) {
let left = i + 1;
let right = n - 1;
while (left < right) {
const currSum = nums[i] + nums[left] + nums[right];
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum;
}
if (currSum < target) {
left++; // need bigger sum
} else if (currSum > target) {
right--; // need smaller sum
} else {
return target; // exact match
}
}
}
return closestSum;
}
// Test cases
console.log(threeSumClosest([-1,2,1,-4],1)); // 2
console.log(threeSumClosest([0,0,0],1)); // 0
console.log(threeSumClosest([1,1,1,1],3)); // 3
/*
COMMENTS — Optimized:
- Two-pointer reduces complexity O(n^3) -> O(n^2)
- Pointer logic:
- sum < target -> left++
- sum > target -> right--
- sum == target -> return target
- Space: O(1)
- Handles negatives, zeros, duplicates correctly
- Interview tip: explain sorting + pointer movements with dry-run examples.
*/
def three_sum_closest_brute(nums, target)
n = nums.length
closest_sum = nums[0] + nums[1] + nums[2]
(0...(n-2)).each do |i|
((i+1)...(n-1)).each do |j|
((j+1)...n).each do |k|
curr_sum = nums[i] + nums[j] + nums[k]
if (curr_sum - target).abs < (closest_sum - target).abs
closest_sum = curr_sum
end
end
end
end
closest_sum
end
puts three_sum_closest_brute([-1,2,1,-4],1)
puts three_sum_closest_brute([0,0,0],1)
puts three_sum_closest_brute([1,1,1,1],3)
# Brute-force 3Sum Closest (LC16) - Ruby
# Time Complexity: O(n^3), Space Complexity: O(1)
# Baseline solution for interview correctness demonstration
def three_sum_closest_brute(nums, target)
n = nums.length
closest_sum = nums[0] + nums[1] + nums[2]
(0...(n-2)).each do |i|
((i+1)...(n-1)).each do |j|
((j+1)...n).each do |k|
curr_sum = nums[i] + nums[j] + nums[k]
if (curr_sum - target).abs < (closest_sum - target).abs
closest_sum = curr_sum
end
end
end
end
closest_sum
end
# Test cases
puts three_sum_closest_brute([-1,2,1,-4],1) # 2
puts three_sum_closest_brute([0,0,0],1) # 0
puts three_sum_closest_brute([1,1,1,1],3) # 3
=begin
COMMENTS — Brute:
- Triple nested loops to check all triplets for closest sum.
- Time: O(n^3), Space: O(1).
- Correctly handles duplicates, zeros, negatives.
- Good first step to show baseline correctness in interviews.
=end
def three_sum_closest(nums, target)
nums.sort!
n = nums.length
closest_sum = nums[0] + nums[1] + nums[2]
(0..n-3).each do |i|
left = i + 1
right = n - 1
while left < right
curr_sum = nums[i] + nums[left] + nums[right]
if (curr_sum - target).abs < (closest_sum - target).abs
closest_sum = curr_sum
end
if curr_sum < target
left += 1
elsif curr_sum > target
right -= 1
else
return target
end
end
end
closest_sum
end
puts three_sum_closest([-1,2,1,-4],1)
puts three_sum_closest([0,0,0],1)
puts three_sum_closest([1,1,1,1],3)
# Optimized 3Sum Closest (LC16) - Ruby
# Time Complexity: O(n^2), Space Complexity: O(1)
# Approach: Sort + Two Pointers
def three_sum_closest(nums, target)
nums.sort!
n = nums.length
closest_sum = nums[0] + nums[1] + nums[2]
(0..n-3).each do |i|
left = i + 1
right = n - 1
while left < right
curr_sum = nums[i] + nums[left] + nums[right]
if (curr_sum - target).abs < (closest_sum - target).abs
closest_sum = curr_sum
end
if curr_sum < target
left += 1 # need bigger sum
elsif curr_sum > target
right -= 1 # need smaller sum
else
return target # exact match
end
end
end
closest_sum
end
# Test cases
puts three_sum_closest([-1,2,1,-4],1) # 2
puts three_sum_closest([0,0,0],1) # 0
puts three_sum_closest([1,1,1,1],3) # 3
=begin
COMMENTS — Optimized:
- Sort + two-pointer reduces complexity O(n^3) -> O(n^2).
- Move left/right pointers according to sum vs target.
- Early return if exact match.
- Space: O(1) extra.
- Edge cases handled: duplicates, zeros, negatives.
- Interview tip: explain sorting and pointer logic clearly.
=end
import Foundation
func threeSumClosestBrute(_ nums: [Int], _ target: Int) -> Int {
let n = nums.count
var closestSum = nums[0] + nums[1] + nums[2]
for i in 0..<n-2 {
for j in i+1..<n-1 {
for k in j+1..<n {
let currSum = nums[i] + nums[j] + nums[k]
if abs(currSum - target) < abs(closestSum - target) {
closestSum = currSum
}
}
}
}
return closestSum
}
print(threeSumClosestBrute([-1,2,1,-4], 1))
print(threeSumClosestBrute([0,0,0], 1))
print(threeSumClosestBrute([1,1,1,1], 3))
// Brute-force 3Sum Closest (LC16) - Swift
// Time Complexity: O(n^3), Space Complexity: O(1)
// Purpose: Baseline correctness demonstration for interviews
import Foundation
func threeSumClosestBrute(_ nums: [Int], _ target: Int) -> Int {
let n = nums.count
var closestSum = nums[0] + nums[1] + nums[2]
// Triple nested loops to check all combinations i < j < k
for i in 0..<n-2 {
for j in i+1..<n-1 {
for k in j+1..<n {
let currSum = nums[i] + nums[j] + nums[k]
if abs(currSum - target) < abs(closestSum - target) {
closestSum = currSum
}
}
}
}
return closestSum
}
// Test cases
print(threeSumClosestBrute([-1,2,1,-4], 1)) // 2
print(threeSumClosestBrute([0,0,0], 1)) // 0
print(threeSumClosestBrute([1,1,1,1], 3)) // 3
/*
COMMENTS — Brute:
- Simple exhaustive search to find closest sum.
- Correctly handles negatives, zeros, duplicates.
- Time: O(n^3), Space: O(1)
- Useful for interviews to illustrate baseline correctness.
- Shows interviewer you understand brute-force before optimization.
*/
import Foundation
func threeSumClosest(_ nums: inout [Int], _ target: Int) -> Int {
nums.sort()
let n = nums.count
var closestSum = nums[0] + nums[1] + nums[2]
for i in 0..<n-2 {
var left = i + 1
var right = n - 1
while left < right {
let currSum = nums[i] + nums[left] + nums[right]
if abs(currSum - target) < abs(closestSum - target) {
closestSum = currSum
}
if currSum < target {
left += 1
} else if currSum > target {
right -= 1
} else {
return target
}
}
}
return closestSum
}
var nums1 = [-1,2,1,-4]
print(threeSumClosest(&nums1, 1))
var nums2 = [0,0,0]
print(threeSumClosest(&nums2, 1))
var nums3 = [1,1,1,1]
print(threeSumClosest(&nums3, 3))
// Optimized 3Sum Closest (LC16) - Swift
// Time Complexity: O(n^2), Space Complexity: O(1)
// Approach: Sort + Two Pointers
import Foundation
func threeSumClosest(_ nums: inout [Int], _ target: Int) -> Int {
nums.sort() // sort for two-pointer strategy
let n = nums.count
var closestSum = nums[0] + nums[1] + nums[2]
for i in 0..<n-2 {
var left = i + 1
var right = n - 1
while left < right {
let currSum = nums[i] + nums[left] + nums[right]
if abs(currSum - target) < abs(closestSum - target) {
closestSum = currSum
}
if currSum < target {
left += 1 // need bigger sum
} else if currSum > target {
right -= 1 // need smaller sum
} else {
return target // exact match
}
}
}
return closestSum
}
// Test cases
var nums1 = [-1,2,1,-4]
print(threeSumClosest(&nums1, 1)) // 2
var nums2 = [0,0,0]
print(threeSumClosest(&nums2, 1)) // 0
var nums3 = [1,1,1,1]
print(threeSumClosest(&nums3, 3)) // 3
/*
COMMENTS — Optimized:
- Two-pointer reduces complexity from O(n^3) -> O(n^2)
- Key pointer movement logic:
- sum < target: move left forward
- sum > target: move right backward
- sum == target: early return
- Handles duplicates, negative numbers, zeros correctly
- Space: O(1)
- Interview tip: Explain with dry-run of small array and pointer moves.
*/
fun threeSumClosestBrute(nums: IntArray, target: Int): Int {
val n = nums.size
var closestSum = nums[0] + nums[1] + nums[2]
for (i in 0 until n - 2) {
for (j in i + 1 until n - 1) {
for (k in j + 1 until n) {
val currSum = nums[i] + nums[j] + nums[k]
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum
}
}
}
}
return closestSum
}
fun main() {
println(threeSumClosestBrute(intArrayOf(-1,2,1,-4),1))
println(threeSumClosestBrute(intArrayOf(0,0,0),1))
println(threeSumClosestBrute(intArrayOf(1,1,1,1),3))
}
// Brute-force 3Sum Closest (LC16) - Kotlin
// Time Complexity: O(n^3), Space Complexity: O(1)
fun threeSumClosestBrute(nums: IntArray, target: Int): Int {
val n = nums.size
var closestSum = nums[0] + nums[1] + nums[2]
for (i in 0 until n - 2) {
for (j in i + 1 until n - 1) {
for (k in j + 1 until n) {
val currSum = nums[i] + nums[j] + nums[k]
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum
}
}
}
}
return closestSum
}
fun main() {
println(threeSumClosestBrute(intArrayOf(-1,2,1,-4),1)) // 2
println(threeSumClosestBrute(intArrayOf(0,0,0),1)) // 0
println(threeSumClosestBrute(intArrayOf(1,1,1,1),3)) // 3
}
/*
COMMENTS — Brute:
- Checks all i<j<k triplets to find closest sum.
- Time: O(n^3), Space: O(1) extra.
- Handles duplicates, zeros, negative numbers naturally.
- Demonstrates correctness baseline for interviews.
*/
fun threeSumClosest(nums: IntArray, target: Int): Int {
nums.sort()
val n = nums.size
var closestSum = nums[0] + nums[1] + nums[2]
for (i in 0 until n - 2) {
var left = i + 1
var right = n - 1
while (left < right) {
val currSum = nums[i] + nums[left] + nums[right]
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum
}
when {
currSum < target -> left++
currSum > target -> right--
else -> return target
}
}
}
return closestSum
}
fun main() {
println(threeSumClosest(intArrayOf(-1,2,1,-4),1))
println(threeSumClosest(intArrayOf(0,0,0),1))
println(threeSumClosest(intArrayOf(1,1,1,1),3))
}
// Optimized 3Sum Closest (LC16) - Kotlin
// Time Complexity: O(n^2), Space Complexity: O(1)
fun threeSumClosest(nums: IntArray, target: Int): Int {
nums.sort() // sort for two-pointer approach
val n = nums.size
var closestSum = nums[0] + nums[1] + nums[2]
for (i in 0 until n - 2) {
var left = i + 1
var right = n - 1
while (left < right) {
val currSum = nums[i] + nums[left] + nums[right]
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum
}
when {
currSum < target -> left++
currSum > target -> right--
else -> return target // exact match
}
}
}
return closestSum
}
fun main() {
println(threeSumClosest(intArrayOf(-1,2,1,-4),1)) // 2
println(threeSumClosest(intArrayOf(0,0,0),1)) // 0
println(threeSumClosest(intArrayOf(1,1,1,1),3)) // 3
}
/*
COMMENTS — Optimized:
- Sort + two-pointer technique reduces complexity from O(n^3) -> O(n^2).
- Move left/right pointers based on comparison with target.
- Early exit if exact sum found.
- Edge cases handled naturally.
- Space: O(1) extra.
- Interview tip: explain sorting + two-pointer and pointer movement logic clearly.
*/
object ThreeSumClosestBrute {
def threeSumClosestBrute(nums: Array[Int], target: Int): Int = {
val n = nums.length
var closestSum = nums(0) + nums(1) + nums(2)
for (i <- 0 until n-2) {
for (j <- i+1 until n-1) {
for (k <- j+1 until n) {
val currSum = nums(i) + nums(j) + nums(k)
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum
}
}
}
}
closestSum
}
def main(args: Array[String]): Unit = {
println(threeSumClosestBrute(Array(-1,2,1,-4),1))
println(threeSumClosestBrute(Array(0,0,0),1))
println(threeSumClosestBrute(Array(1,1,1,1),3))
}
}
// Brute-force 3Sum Closest (LC16) - Scala
// Time Complexity: O(n^3), Space Complexity: O(1)
// Baseline correctness demonstration
object ThreeSumClosestBrute {
def threeSumClosestBrute(nums: Array[Int], target: Int): Int = {
val n = nums.length
var closestSum = nums(0) + nums(1) + nums(2)
for (i <- 0 until n-2) {
for (j <- i+1 until n-1) {
for (k <- j+1 until n) {
val currSum = nums(i) + nums(j) + nums(k)
if (Math.abs(currSum - target) < Math.abs(closestSum - target)) {
closestSum = currSum
}
}
}
}
closestSum
}
def main(args: Array[String]): Unit = {
println(threeSumClosestBrute(Array(-1,2,1,-4),1)) // 2
println(threeSumClosestBrute(Array(0,0,0),1)) // 0
println(threeSumClosestBrute(Array(1,1,1,1),3)) // 3
}
/*
COMMENTS — Brute:
- Triple nested loops check all triplets.
- Correctly handles duplicates, zeros, negative numbers.
- Time: O(n^3), Space: O(1)
- Good first step for interviews to show baseline correctness.
*/
}
object ThreeSumClosest {
def threeSumClosest(nums: Array[Int], target: Int): Int = {
val sorted = nums.sorted
val n = sorted.length
var closestSum = sorted(0) + sorted(1) + sorted(2)
for (i <- 0 until n-2) {
var left = i + 1
var right = n - 1
while (left < right) {
val currSum = sorted(i) + sorted(left) + sorted(right)
if (Math.abs(currSum - target) < Math.abs(closestSum - target))
closestSum = currSum
if (currSum < target)
left += 1
else if (currSum > target)
right -= 1
else
return target
}
}
closestSum
}
def main(args: Array[String]): Unit = {
println(threeSumClosest(Array(-1,2,1,-4),1))
println(threeSumClosest(Array(0,0,0),1))
println(threeSumClosest(Array(1,1,1,1),3))
}
}
// Optimized 3Sum Closest (LC16) - Scala
// Time Complexity: O(n^2), Space Complexity: O(1)
// Approach: Sort + Two Pointers
object ThreeSumClosest {
def threeSumClosest(nums: Array[Int], target: Int): Int = {
val sorted = nums.sorted
val n = sorted.length
var closestSum = sorted(0) + sorted(1) + sorted(2)
for (i <- 0 until n-2) {
var left = i + 1
var right = n - 1
while (left < right) {
val currSum = sorted(i) + sorted(left) + sorted(right)
if (Math.abs(currSum - target) < Math.abs(closestSum - target))
closestSum = currSum
if (currSum < target)
left += 1 // need bigger sum
else if (currSum > target)
right -= 1 // need smaller sum
else
return target // exact match
}
}
closestSum
}
def main(args: Array[String]): Unit = {
println(threeSumClosest(Array(-1,2,1,-4),1)) // 2
println(threeSumClosest(Array(0,0,0),1)) // 0
println(threeSumClosest(Array(1,1,1,1),3)) // 3
}
/*
COMMENTS — Optimized:
- Sorting + two-pointer reduces complexity O(n^3) -> O(n^2)
- Pointer logic:
- sum < target: increment left
- sum > target: decrement right
- sum == target: early exit
- Space: O(1)
- Edge cases handled: duplicates, zeros, negatives
- Interview tip: explain sorting + pointer movement with example arrays
*/
}
fn three_sum_closest_brute(nums: &Vec<i32>, target: i32) -> i32 {
let n = nums.len();
let mut closest_sum = nums[0] + nums[1] + nums[2];
for i in 0..n-2 {
for j in i+1..n-1 {
for k in j+1..n {
let curr_sum = nums[i] + nums[j] + nums[k];
if (curr_sum - target).abs() < (closest_sum - target).abs() {
closest_sum = curr_sum;
}
}
}
}
closest_sum
}
fn main() {
println!("{}", three_sum_closest_brute(&vec![-1,2,1,-4],1));
println!("{}", three_sum_closest_brute(&vec![0,0,0],1));
println!("{}", three_sum_closest_brute(&vec![1,1,1,1],3));
}
// Brute-force 3Sum Closest (LC16) - Rust
// Time Complexity: O(n^3), Space Complexity: O(1)
// Purpose: Baseline correctness demonstration for interviews
fn three_sum_closest_brute(nums: &Vec<i32>, target: i32) -> i32 {
let n = nums.len();
let mut closest_sum = nums[0] + nums[1] + nums[2];
// Triple nested loops: check all i<j<k combinations
for i in 0..n-2 {
for j in i+1..n-1 {
for k in j+1..n {
let curr_sum = nums[i] + nums[j] + nums[k];
if (curr_sum - target).abs() < (closest_sum - target).abs() {
closest_sum = curr_sum;
}
}
}
}
closest_sum
}
fn main() {
// Test cases
println!("{}", three_sum_closest_brute(&vec![-1,2,1,-4],1)); // 2
println!("{}", three_sum_closest_brute(&vec![0,0,0],1)); // 0
println!("{}", three_sum_closest_brute(&vec![1,1,1,1],3)); // 3
}
/*
COMMENTS — Brute:
- Simple baseline: check all triplets to find closest sum.
- Handles duplicates, negative numbers, zeros naturally.
- Time: O(n^3), Space: O(1).
- Useful in interviews to show correctness before optimization.
- Good to illustrate exhaustive search and reasoning.
*/
fn three_sum_closest(nums: &mut Vec<i32>, target: i32) -> i32 {
nums.sort();
let n = nums.len();
let mut closest_sum = nums[0] + nums[1] + nums[2];
for i in 0..n-2 {
let mut left = i + 1;
let mut right = n - 1;
while left < right {
let curr_sum = nums[i] + nums[left] + nums[right];
if (curr_sum - target).abs() < (closest_sum - target).abs() {
closest_sum = curr_sum;
}
if curr_sum < target {
left += 1;
} else if curr_sum > target {
right -= 1;
} else {
return target;
}
}
}
closest_sum
}
fn main() {
let mut nums1 = vec![-1,2,1,-4];
println!("{}", three_sum_closest(&mut nums1, 1));
let mut nums2 = vec![0,0,0];
println!("{}", three_sum_closest(&mut nums2, 1));
let mut nums3 = vec![1,1,1,1];
println!("{}", three_sum_closest(&mut nums3, 3));
}
// Optimized 3Sum Closest (LC16) - Rust
// Time Complexity: O(n^2), Space Complexity: O(1)
// Approach: Sort + Two Pointers
fn three_sum_closest(nums: &mut Vec<i32>, target: i32) -> i32 {
nums.sort(); // sort to enable two-pointer strategy
let n = nums.len();
let mut closest_sum = nums[0] + nums[1] + nums[2];
for i in 0..n-2 {
let mut left = i + 1;
let mut right = n - 1;
while left < right {
let curr_sum = nums[i] + nums[left] + nums[right];
if (curr_sum - target).abs() < (closest_sum - target).abs() {
closest_sum = curr_sum;
}
if curr_sum < target {
left += 1; // need bigger sum
} else if curr_sum > target {
right -= 1; // need smaller sum
} else {
return target; // exact match
}
}
}
closest_sum
}
fn main() {
let mut nums1 = vec![-1,2,1,-4];
println!("{}", three_sum_closest(&mut nums1, 1)); // 2
let mut nums2 = vec![0,0,0];
println!("{}", three_sum_closest(&mut nums2, 1)); // 0
let mut nums3 = vec![1,1,1,1];
println!("{}", three_sum_closest(&mut nums3, 3)); // 3
}
/*
COMMENTS — Optimized:
- Sorting + two-pointer reduces O(n^3) -> O(n^2).
- Pointer movement explained:
- If sum < target, increment left to increase sum.
- If sum > target, decrement right to decrease sum.
- Early exit if exact target found.
- Handles duplicates, negatives, zeros correctly.
- Space: O(1) extra beyond input.
- Interview tip: explain two-pointer movement with dry-run examples.
*/
<?php
function threeSumClosestBrute($nums, $target) {
$n = count($nums);
$closestSum = $nums[0] + $nums[1] + $nums[2];
for ($i = 0; $i < $n - 2; $i++) {
for ($j = $i + 1; $j < $n - 1; $j++) {
for ($k = $j + 1; $k < $n; $k++) {
$currSum = $nums[$i] + $nums[$j] + $nums[$k];
if (abs($currSum - $target) < abs($closestSum - $target)) {
$closestSum = $currSum;
}
}
}
}
return $closestSum;
}
echo threeSumClosestBrute([-1,2,1,-4],1) . "\n";
echo threeSumClosestBrute([0,0,0],1) . "\n";
echo threeSumClosestBrute([1,1,1,1],3) . "\n";
?>
<?php
// Brute-force 3Sum Closest (LC16) - PHP
// Time Complexity: O(n^3), Space Complexity: O(1)
// Purpose: Baseline correctness demonstration for interviews
function threeSumClosestBrute($nums, $target) {
$n = count($nums);
$closestSum = $nums[0] + $nums[1] + $nums[2]; // Initial triplet sum
// Triple nested loops: check all i<j<k combinations
for ($i = 0; $i < $n - 2; $i++) {
for ($j = $i + 1; $j < $n - 1; $j++) {
for ($k = $j + 1; $k < $n; $k++) {
$currSum = $nums[$i] + $nums[$j] + $nums[$k];
if (abs($currSum - $target) < abs($closestSum - $target)) {
$closestSum = $currSum;
}
}
}
}
return $closestSum;
}
// Test cases
echo threeSumClosestBrute([-1,2,1,-4],1) . "\n"; // 2
echo threeSumClosestBrute([0,0,0],1) . "\n"; // 0
echo threeSumClosestBrute([1,1,1,1],3) . "\n"; // 3
/*
COMMENTS — Brute:
- Simple baseline: checks all triplets to find closest sum.
- Complexity: Time O(n^3), Space O(1).
- Handles duplicates, zeros, negatives naturally.
- Useful for interviews to show correctness first.
*/
?>
<?php
function threeSumClosest($nums, $target) {
sort($nums);
$n = count($nums);
$closestSum = $nums[0] + $nums[1] + $nums[2];
for ($i = 0; $i < $n - 2; $i++) {
$left = $i + 1;
$right = $n - 1;
while ($left < $right) {
$currSum = $nums[$i] + $nums[$left] + $nums[$right];
if (abs($currSum - $target) < abs($closestSum - $target)) {
$closestSum = $currSum;
}
if ($currSum < $target) {
$left++;
} elseif ($currSum > $target) {
$right--;
} else {
return $target;
}
}
}
return $closestSum;
}
echo threeSumClosest([-1,2,1,-4],1) . "\n";
echo threeSumClosest([0,0,0],1) . "\n";
echo threeSumClosest([1,1,1,1],3) . "\n";
?>
<?php
// Optimized 3Sum Closest (LC16) - PHP
// Time Complexity: O(n^2), Space Complexity: O(1)
// Approach: Sort + Two Pointers
function threeSumClosest($nums, $target) {
sort($nums); // sort to use two-pointer strategy
$n = count($nums);
$closestSum = $nums[0] + $nums[1] + $nums[2];
for ($i = 0; $i < $n - 2; $i++) {
$left = $i + 1;
$right = $n - 1;
while ($left < $right) {
$currSum = $nums[$i] + $nums[$left] + $nums[$right];
if (abs($currSum - $target) < abs($closestSum - $target)) {
$closestSum = $currSum;
}
if ($currSum < $target) {
$left++; // need bigger sum
} elseif ($currSum > $target) {
$right--; // need smaller sum
} else {
return $target; // exact match
}
}
}
return $closestSum;
}
// Test cases
echo threeSumClosest([-1,2,1,-4],1) . "\n"; // 2
echo threeSumClosest([0,0,0],1) . "\n"; // 0
echo threeSumClosest([1,1,1,1],3) . "\n"; // 3
/*
COMMENTS — Optimized:
- Sort array + two-pointer method reduces complexity O(n^3) -> O(n^2).
- Pointer logic: move left/right based on comparison with target.
- Early exit if exact sum is found.
- Space: O(1) extra.
- Edge cases like duplicates, zeros, negative numbers handled naturally.
- Interview tip: explain two-pointer movement and dry-run example.
*/
?>
int threeSumClosestBrute(List<int> nums, int target) {
int n = nums.length;
int closestSum = nums[0] + nums[1] + nums[2];
for (int i = 0; i < n - 2; i++) {
for (int j = i + 1; j < n - 1; j++) {
for (int k = j + 1; k < n; k++) {
int currSum = nums[i] + nums[j] + nums[k];
if ((currSum - target).abs() < (closestSum - target).abs()) {
closestSum = currSum;
}
}
}
}
return closestSum;
}
void main() {
print(threeSumClosestBrute([-1,2,1,-4],1));
print(threeSumClosestBrute([0,0,0],1));
print(threeSumClosestBrute([1,1,1,1],3));
}
// Brute-force 3Sum Closest (LC16) - Dart
// Time Complexity: O(n^3), Space Complexity: O(1)
// Purpose: Baseline correctness demonstration for interviews
int threeSumClosestBrute(List<int> nums, int target) {
int n = nums.length;
int closestSum = nums[0] + nums[1] + nums[2]; // initial triplet
for (int i = 0; i < n - 2; i++) {
for (int j = i + 1; j < n - 1; j++) {
for (int k = j + 1; k < n; k++) {
int currSum = nums[i] + nums[j] + nums[k];
if ((currSum - target).abs() < (closestSum - target).abs()) {
closestSum = currSum;
}
}
}
}
return closestSum;
}
void main() {
print(threeSumClosestBrute([-1,2,1,-4],1)); // 2
print(threeSumClosestBrute([0,0,0],1)); // 0
print(threeSumClosestBrute([1,1,1,1],3)); // 3
}
/*
COMMENTS — Brute:
- Triple nested loops check all combinations of i<j<k.
- Time: O(n^3), Space: O(1) extra.
- Edge cases handled naturally: duplicates, zeros, negatives.
- Purpose: show correctness baseline in interviews.
- Keyword tip: "check all triplets", "baseline brute-force".
*/
import 'dart:math';
int threeSumClosest(List<int> nums, int target) {
nums.sort();
int n = nums.length;
int closestSum = nums[0] + nums[1] + nums[2];
for (int i = 0; i < n - 2; i++) {
int left = i + 1;
int right = n - 1;
while (left < right) {
int currSum = nums[i] + nums[left] + nums[right];
if ((currSum - target).abs() < (closestSum - target).abs()) {
closestSum = currSum;
}
if (currSum < target) {
left++;
} else if (currSum > target) {
right--;
} else {
return target;
}
}
}
return closestSum;
}
void main() {
print(threeSumClosest([-1,2,1,-4],1));
print(threeSumClosest([0,0,0],1));
print(threeSumClosest([1,1,1,1],3));
}
// Optimized 3Sum Closest (LC16) - Dart
// Time Complexity: O(n^2), Space Complexity: O(1)
// Approach: Sort + Two Pointers
import 'dart:math';
int threeSumClosest(List<int> nums, int target) {
nums.sort(); // sort to use two pointers
int n = nums.length;
int closestSum = nums[0] + nums[1] + nums[2];
for (int i = 0; i < n - 2; i++) {
int left = i + 1;
int right = n - 1;
while (left < right) {
int currSum = nums[i] + nums[left] + nums[right];
if ((currSum - target).abs() < (closestSum - target).abs()) {
closestSum = currSum;
}
if (currSum < target) {
left++; // need bigger sum
} else if (currSum > target) {
right--; // need smaller sum
} else {
return target; // exact match
}
}
}
return closestSum;
}
void main() {
print(threeSumClosest([-1,2,1,-4],1)); // 2
print(threeSumClosest([0,0,0],1)); // 0
print(threeSumClosest([1,1,1,1],3)); // 3
}
/*
COMMENTS — Optimized:
- Sort + two-pointer reduces from O(n^3) -> O(n^2).
- Pointer logic: left++ if sum < target, right-- if sum > target.
- Early exit if exact match found.
- Edge cases: duplicates, zeros, negatives handled naturally.
- Space Complexity: O(1) extra.
- Interview tip: explain sorting + two-pointer, show dry-run for clarity.
*/