• 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 ",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));
        }
    }


  • 相关阅读:
    IDEA 翻译插件网络错误
    win10 商店无法访问网络
    java 将中缀表达式转换成后缀表达式(逆波兰表达式)
    队列(Queue)
    单向链表
    Linux学习笔记2--------用户和组
    Linux学习笔记1-----------打包压缩,Vim
    如何修改主机名
    Linux的rpm软件包和yum软件包和wget
    Fiddler抓取电脑,手机https数据
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854428.html
Copyright © 2020-2023  润新知