3Sum Closest -- LeetCode

                原题链接:  http://oj.leetcode.com/problems/3sum-closest/

这道题跟3Sum很类似,区别就是要维护一个最小的diff,求出和目标最近的三个和。brute force时间复杂度为O(n^3),优化的解法是使用排序之后夹逼的方法,总的时间复杂度为O(n^2+nlogn)=(n^2),空间复杂度是O(n),代码如下:

public int threeSumClosest(int[] num, int target) {    if(num == null || num.length<=2)        return Integer.MIN_VALUE;    Arrays.sort(num);    int closest = num[0]+num[1]+num[2]-target;        for(int i=0;i<num.length-2;i++)    {        int cur = twoSum(num,target-num[i],i+1);        if(Math.abs(cur)<Math.abs(closest))            closest = cur;     }    return target+closest;}private int twoSum(int[] num, int target, int start){    int closest = num[start]+num[start+1]-target;    int l = start;    int r = num.length-1;    while(l<r)    {        if(num[l]+num[r]==target)            return 0;        int diff = num[l]+num[r]-target;        if(Math.abs(diff)<Math.abs(closest))            closest = diff;            if(num[l]+num[r]>target)        {            r--;        }        else        {            l++;        }    }    return closest;}
这道题具体的考察点可以参见 3Sum ,稍微变体一下,其实区别不大。此题更加复杂的扩展是4Sum,请参见4Sum -- LeetCode.

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/weixin_43418664/article/details/86548697
今日推荐