最大乘积 – 拼多多2018笔试

题目描述

在这里插入图片描述

解题思路

设max1、max2、max3分别为第1大到第3大的数,min1、min2分别为第1小到第2小的数。
思路:
 如果数组中全是正数:结果为max1max2max3
 如果数组中全是负数:结果为max1min1min2
 如果数组中有正有负:结果为:max{ max1max2max3,max1min1min2}

解题方法:

  • 在遍历数组是需要记录第一,第二,第三大,和最小,次小的数(负负的正)
  • 返回Math.max(max1max2max3,max1min1min2)

代码

package TestNode.ArraysProblem;

import java.util.Scanner;

public class MaxProductInIntArray {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        long[] array = new long[n];
        for (int i = 0; i <n ; i++) {
            array[i] = sc.nextLong();
        }
        getLargestMul(array,n);
    }
    static void getLargestMul(long[] num, int len){
        long max1=0,max2=0,max3=0, min1=0,min2=0;
        for (int i = 0; i <len ; i++) {
            if(num[i]!=0){
                if(num[i]>max1){
                    max3 = max2;
                    max2 = max1;
                    max1 = num[i];
                }else if(num[i]>max2){
                    max3 = max2;
                    max2 = num[i];
                }else if(num[i]>max3){
                    max3 = num[i];
                }else if(num[i]<min1 ){
                    min2 = min1;
                    min1 = num[i];
                }else if(num[i]>min1 && num[i]<min2){
                    min2 = num[i];
                }
            }else continue;

        }
        long max = Math.max(max1*max2*max3,max1*min1*min2);
        System.out.println(max);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_43857365/article/details/89472829