最大乘积 – 拼多多2018笔试

14 篇文章 0 订阅
4 篇文章 1 订阅

题目描述

在这里插入图片描述

解题思路

设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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值