Maximum Product of Three Numbers

本文介绍了一种高效算法,用于从整数数组中找出三个数的最大乘积。该算法适用于数组长度在3到10^4之间的场景,并确保任何三个数的乘积不会超出32位带符号整数的范围。通过一次遍历即可找到最大和最小的三个数,实现时间复杂度为O(n)。
摘要由CSDN通过智能技术生成

Given an integer array, find three numbers whose product is maximum and output the maximum product.

Example 1:

Input: [1,2,3]
Output: 6

Example 2:

Input: [1,2,3,4]
Output: 24

Note:

  1. The length of the given array will be in range [3,104] and all elements are in the range [-1000, 1000].
  2. Multiplication of any three numbers in the input won't exceed the range of 32-bit signed integer.

思路:数组分三种情况

1. 全部正数

2. 全部负数

3.有负数,有正数

1 & 2 全部是最大的三位数的乘积, max1,max2,max3

3 就是 + - - , max1,min1,min2

找min1,min2,max1,max2,max3,用扫描的方法找,可以做到O(n), 注意变量的推移更替;

class Solution {
    public int maximumProduct(int[] nums) {
        int max1 = Integer.MIN_VALUE;
        int max2 = Integer.MIN_VALUE;
        int max3 = Integer.MIN_VALUE;
        
        int min1 = Integer.MAX_VALUE;
        int min2 = Integer.MAX_VALUE;
        
        for(int i=0; i<nums.length; i++) {
            int n = nums[i];
            if(n>max1) {
                max3 = max2;
                max2 = max1;
                max1= n;
            } else if( n>max2){
                max3 = max2;
                max2 = n;
            } else if(n>max3){
                max3 = n;
            }
            
            if(n<min1){
                min2 = min1;
                min1 = n;
            }else if(n<min2){
                min2 = n;
            }
        }
        return Math.max(max1*max2*max3 , max1*min1*min2);   
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值