leetcode 16: 3 Sum closest (C#版)

来源:互联网 发布:万合星多屏软件破解版 编辑:程序博客网 时间:2024/06/05 03:33

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">



                                             
0 0
原创粉丝点击