求无序数组中的三个数的最大乘积

时间:2022-12-30 15:13:43
 
package exam;import java.util.Scanner;/** * 算法思想:取数组中前三个不为0的数作为初始最大乘积, * 然后一个一个地考虑新加入一个数对前面数组的三个数最大乘积是否有影响, * 如果有影响,说明最大三个数应该被新加入的数替换掉, * 如果没有影响,则保持原来的三个数的乘积为最大值。 * @author lilu * */public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);        int n = in.nextInt();        int[] arr=new int[n];                for(int i=0;i<n;i++){            arr[i]=in.nextInt();                    }                                int[] elements=new int[3];                boolean hasZero=false;                //取前面不为0的三个数        int k=0;        int index=0;        for(index=0;index<n;index++){        if(arr[index]!=0){        elements[k]=arr[index];         k++;        if(k==3) {        index++;        break;              }        }else{        hasZero=true;        }               }                int max=elements[0]*elements[1]*elements[2];        int max1;        int max2;        int max3;                 for(int i=index;i<n;i++){                if(arr[i]==0){        hasZero=true;        continue;        }                        max=elements[0]*elements[1]*elements[2];        max1=elements[0]*elements[1]*arr[i];        max2=elements[0]*elements[2]*arr[i];        max3=elements[1]*elements[2]*arr[i];                if(max1>max){        max=max1;        }        if(max2>max){        max=max2;        }            if(max3>max){        max=max3;        }                if(max==max1){        elements[2]=arr[i];        }        if(max==max2){        elements[1]=arr[i];        }        if(max==max3){        elements[0]=arr[i];        }        }                if(max<0&&hasZero)        max=0;                System.out.println(max);                        }}