Algs4-1.4.15快速3-sum

1.4.15快速3-sum。作为热身,使用一个线性级别的算法(而非基于二分查找的线性对数级别的算法)实现TwoSumFaster来计算已排序的数组中和为0的整数对的数量。用相同的思想为3-sum问题给出一个平方级别的算法。
答:
import java.util.Arrays;
public class TwoSumFaster
{
    public static int count(int[] a)
    {
        int i=0;
        int j=a.length-1;
        int cnt=0;
        int sum;
        while(i<j)
        {
            sum=a[i]+a[j];
            if(sum==0)
            {
               // StdOut.printf("a[%d]=%d,a[%d]=%d\n",i,j,a[i],a[j]);
                i++;
                j--;
                cnt++;
            }
            else if(sum>0)
                j--;
            else
                i++;
        }//end while
        return cnt;
    }//end count
   
    public static void main(String[] args)
    {
        int[] a=In.readInts(args[0]);
        Arrays.sort(a);
        StdOut.println(count(a));
    }
}

/////////////////////////////


import java.util.Arrays;
public class ThreeSumFaster
{
    public static int count(int[] a)
    {
        int j;
        int k;
        int cnt=0;
        int sum;
        for(int i=0;i<a.length;i++)
        {
            j=i+1;
            k=a.length-1;
            while(j<k)
           {
              sum=a[i]+a[j]+a[k];
              if(sum==0)
               {
                 j++;
                 k--;
                 cnt++;
              }
              else if(sum>0)
                 k--;
              else
                 j++;
           }//end while
        }//end for
        return cnt;
    }//end count
   
    public static void main(String[] args)
    {
        int[] a=In.readInts(args[0]);
        Arrays.sort(a);
        StdOut.println(count(a));
    }
}


posted @ 2018-10-26 09:07  修电脑的龙生  阅读(375)  评论(0编辑  收藏  举报