n(n>=3)个数的不含0的数组,去除一个数,使得剩余的数乘积最

2019-11-01  本文已影响0人  Sanisy
2019-11-01_151247.jpg
    /**
     * n(n>=3)个数的不含0的数组,去除一个数,使得剩余的数乘积最大。
     * 算法:
     *      A.如果所有的数乘积结果是负数,那么导致影响乘积最大的数就是最大的那个负数,剔除之后整个乘积就是最大的
     *      B.如果所有的数乘积结果是正数,那么导致影响乘积最大的数就是最小的那个正数,剔除之后整个乘积就是最大的
     *    negativeMax: 用来记录最大的负数
     *    positiveMin: 用来记录最小的正数
     *    isNegative:用来表示乘积结果的正负性质
     * @param arr
     * @return
     */
    private static int getMinMultiNumInGroup(int[] arr) {
        if (arr == null || arr.length < 3) {
            throw new RuntimeException("非法的数组");
        }

        int negativeMax = 0;
        int positiveMin = 0;
        if (arr[0] < 0) {
            negativeMax = arr[0];
        } else {
            positiveMin = arr[0];
        }

        boolean isNegative = false;
        for (int i = 1; i < arr.length; i++) {

            if (arr[i] < 0) {
                // 找到最大的负数
                if (negativeMax == 0 || negativeMax < arr[i]) {
                    negativeMax = arr[i];
                }
                // 记录乘积的符号变化
                if (!isNegative) {
                    isNegative = true;
                }else {
                    isNegative = false;
                }
            } else {
                // 找到最小的正数
                if (positiveMin > arr[i]) {
                    positiveMin = arr[i];
                }
                // 正数乘以任何非0的数符号不变
            }
        }

        return isNegative ? negativeMax : positiveMin;
    }
上一篇下一篇

猜你喜欢

热点阅读