拼多多2018——最大乘积java

【题目】
给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)
输入描述: 无序整数数组A[n]
输出描述: 满足条件的最大乘积
示例1
输入 3 4 1 2
输出 24
【思路】
三个数的最大乘积为:
1.正数中的最大的三个数
2.正数中最大的一个数 和 负数最小的两个数(负负得正)

package nian2018;
import java.util.Scanner;
public class Main1 {
	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();
		}
		getMaxMulti(array,n);
	}
	public static void getMaxMulti(long[] array,int num){
		long max1 = 0,max2 = 0,max3 = 0,min1 = 0,min2 = 0;
		for(int i = 0;i<num;i++){
			if(array[i]!= 0){
				if(array[i]>max1){
					max3 = max2;
					max2 = max1;
					max1 = array[i];
				}else if(array[i]>max2){
					max3 = max2;
					max2 = array[i];
				}else if(array[i]>max3){
					max3 = array[i];
				}else if(array[i]<min1){
					min2 = min1;
					min1 = array[i];
				}else if(array[i]<min2 && array[i]>min1){
					min2 = array[i];
				}
			}else continue;
		}
		long max = Math.max(max1*max2*max3, max1*min1*min2);
		System.out.println(max);
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_39795049/article/details/88836234
今日推荐