Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.
For example, given array S = {-1 2 1 -4}, and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace _3Sum { class threesumclosest { public int ThreeSumClosest(int[] nums, int target) { List<int> myL = nums.ToList(); myL.Sort(); int[] mynum = myL.ToArray(); int start, end, current; List<int> mylist = new List<int>(); List<int> myres = new List<int>(); for (int i = 0; i < mynum.Length; i++) { if (i != 0 && mynum[i] == mynum[i - 1]) { continue; } start = i + 1; end = mynum.Length - 1; while (start < end) { if (start != i + 1 && mynum[start] == mynum[start - 1]) { start++; continue; } current = mynum[i] + mynum[start] + mynum[end]; if (target > current) { mylist.Add(target - current); start++; } else { myres.Add(current - target); end--; } } } int x1, x2; if (mylist.Count != 0) { x1 = mylist.Min(); } else { x1 = myres.Min()+1; } if (myres.Count != 0) { x2 = myres.Min(); } else { x2 = mylist.Min()+1; } int x3 = target-x1; int x4 = target + x2; if (mylist == null ||x1> x2) { return x4; } else if (myres == null || x1 < x2) { return x3; } else { return x4; } } } }
<pre name="code" class="html">