C#解leetcode 16. 3Sum Closest

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).

答案:

public class Solution {
    public int ThreeSumClosest(int[] nums, int target) {
         )
             return nums.Sum();//计算数组所有元素的和

        List<int> list=new List<int>();
        ,sum=;
        ;i<nums.Length;i++)
            list.Add(nums[i]);

        list.Sort();

      answer=list[]+list[]+list[];//这个必须有,不能删除
      ;i<nums.Length-;i++)
      {
          ;
          ;

          while(j<k)
          {
             sum =  list[i]+list[j]+list[k];
             if (Math.Abs(target-answer)  >Math.Abs(target-sum) )
             {
                  answer=sum;
             if(answer==target)
                  return answer;
             }

             if (sum>target)
               k--;
             else
              j++;
          }
      }

     return answer;

    }
}

总结

1 c#的?:这个三元运算符,必须要赋值给一个变量,如int a=(1>2)?2:3; 此时a=3.而不能单独的(1>2)?2:3使用,此时会报错

错误 1 只有 assignment、call、increment、decrement 和 new 对象表达式可用作语句

2 List数组添加元素应该使用Add()方法,而不能够使用list[i]=1的这种赋值形式。

3 nums.Sum()是对数组的所用元素求和的运算

4 语句answer=list[1]+list[2]+list[3];这个必须有,不能删除。因为如果不加这句,按照程序来看,answer的初始值为0,此时如果出现了answer=0比初始的sum值优秀的情况下,answer的值将不会被更改。等for循环结束,answer仍然等于0,有可能数组的元素相加的最小值仍大于0,此时就会错误.给出一个错误的测试用例  【1,1,1,1】  ,0

而当加上answer=list[1]+list[2]+list[3]一句之后,可以确保返回值一定是数组其中三个元素和的最小值(即使程序while循环一直没有对answer在进行赋值)

5 这个算法的想法是,先对数组进行排序。for循环完成的工作是:在固定第一个元素的情况下,从第二个元素和最后一个元素开始遍历,如果找到了一个和值等于目标值,则返回该值;如果找不到的话,则将第二个元素后移或者最后一个元素前移,不断往复计算。

上一篇:3d角色模型 制作 全过程 。3d max 。3d role model making process.3d Max


下一篇:Kafka Eagle 源码解读