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

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

作者: Sanisy | 来源:发表于2019-11-01 15:16 被阅读0次
    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;
        }
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/wfofbctx.html