java1到100乘积_最大乘积的N-1项,只用乘法不能用除法 (Java)实现

package algorithm.misc;import util.*;public class MaxProductOfN1 {    private static int exceptIndex = -1;        public static long regMethod(int data[])    {        long ret = Long.MIN_VALUE;        long tmp = 1;        for(int i = 0; i < data.length; i++)        {            tmp = 1;            for(int j = 0; j < data.length; j++)            {                if(j != i)                {                    tmp *= data[j];                }            }            if(tmp > ret)            {                ret = tmp;                exceptIndex = i;            }        }        return ret;    }        public static long dp(int data[])    {        long ascent[] = new long[data.length + 1];                ascent[0] = 1;            for(int i = 0; i < data.length; i++)        {            ascent[i + 1] = ascent[i] * data[i];        }                        long descent[] = new long[data.length + 1];                descent[0] = 1;            for(int i = 0; i < data.length; i++)        {            descent[i + 1] = descent[i] * data[data.length - i - 1];        }                long ret = Long.MIN_VALUE;        long tmp = 1;                for(int i = 0; i < data.length; i++)        {            tmp = ascent[i] * descent[data.length - i - 1];                        if(tmp > ret)            {                ret = tmp;                exceptIndex = i;            }        }                return ret;    }            public static long analyse(int data[])    {        long ret = 1;                int numOfPos = 0, numOfNeg = 0, numOfZero = 0;                for(int i = 0; i < data.length; i++)        {            if(data[i] == 0)            {                numOfZero++;            }            else if(data[i] > 0)            {                numOfPos++;            }            else            {                numOfNeg++;            }        }                int index = -1;        //There are zeros        if(numOfZero > 0)        {            //More than 2 zeros            if(numOfZero > 1)            {                exceptIndex = 0;                return 0;            }            //Only 1 zero            else            {                //The number of negative number is even.                if(numOfNeg % 2 == 0)                {                    index = getIndex(data, 0);                    exceptIndex = index;                    return multipleExcept(data, index);                }                //odd                else                {                    exceptIndex = 0;                    return 0;                }            }        }        else if(numOfNeg % 2 == 1)        {            index = -1;            int maxNegValue = Integer.MIN_VALUE;            for(int i = 0; i < data.length; i++)            {                if(data[i] < 0 && data[i] > maxNegValue)                {                    maxNegValue = data[i];                    index = i;                }            }            exceptIndex = index;            return multipleExcept(data, index);        }        else        {            index = -1;            int minPosValue = Integer.MAX_VALUE;            for(int i = 0; i < data.length; i++)            {                if(data[i] > 0 && data[i] < minPosValue)                {                    minPosValue = data[i];                    index = i;                }            }            exceptIndex = index;            return multipleExcept(data, index);        }    }    public static int getIndex(int data[], int value)    {        for(int i = 0; i < data.length; i++)        {            if(data[i] == value)            {                return i;            }        }        return -1;    }    public static long multipleExcept(int data[], int index)    {        long ret = 1;                for(int i = 0; i < data.length; i++)        {            if(i != index)            {                ret *= data[i];            }        }        return ret;    }        private static void formatOutputRet(long ret, int data[])    {        System.out.print("Result: " + ret);        System.out.print(", Except Index = " + exceptIndex + ", " + data[exceptIndex]);        System.out.println();            }    public static void test1()    {//        int data[] = {20, 2, 0, -7, -7, 6, 7, 0, 9, 10};        int data[] = ArrayUtil.generate(10, 101);        ArrayUtil.output(data);                long ret = regMethod(data);        formatOutputRet(ret, data);                long ret1 = dp(data);        formatOutputRet(ret1, data);                long ret2 = analyse(data);        formatOutputRet(ret2, data);    }    /**     * @param args     */    public static void main(String[] args) {        test1();    }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值