几个数字求乘积最大或者最小,思路是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了几个数字求乘积最大或者最小,思路是啥相关的知识,希望对你有一定的参考价值。

你好
首先
如果是最大
那么
两个数最大相乘才是最大
所以
要两个数是最大的

就是
8642
x
7531
如果是
最小
反之
ok
仅代表个人观点,不喜勿喷,谢谢。
参考技术A 小学肯定不会有8位数的了。
一般是4个或者5个,让学生锻炼一下乘法的能力。
大数放在第一个。比如
12345
5和4一定要放在两个相乘数的第一位上
剩下的也没几种配合了,算一下就行了。
531*42
532*41
521*43
就这三种了,算一下就知道了。

152. Maximum Product Subarray

一、题目

  1、审题

  技术分享图片

  2、分析

    求一个整数数组中的连续子串的最大乘积。

 

二、解答

  1、思路:

      ①、遍历数组,采用三个变量进行记录。

          maxCurProduct:包含当前下标的数组元素时的最大乘积。

          minCurProduct: 包含当前下标的数组元素时的最小乘积。

          product:   当前为止的最大乘积。

      ②、因为数组中可能存在负数,而 负数乘以越小的数乘积越大。故当 arr[i] < 0 时,交换 maxCurProduct 与 minCurProduct 值。

    public int maxProduct(int[] nums) {
        if(nums.length == 0)
            return 0;
        int product = nums[0];
        int minCurProduct = nums[0]; // 到当前元素位置 max
        int maxCurProduct = nums[0]; // 到当前位置 min
        for (int i = 1; i < nums.length; i++) {
            
            if(nums[i] < 0) {
                // num[i] < 0, 则 curProduct 越小,乘积越大
                int tmp = minCurProduct;
                minCurProduct = maxCurProduct;
                maxCurProduct = tmp;
            }
                
            maxCurProduct = Math.max(nums[i], maxCurProduct * nums[i]);
            minCurProduct = Math.min(nums[i], minCurProduct * nums[i]);
            
            product = Math.max(product, maxCurProduct);
        }
        return product;
    }

 

以上是关于几个数字求乘积最大或者最小,思路是啥的主要内容,如果未能解决你的问题,请参考以下文章

求两个乘积最小的数

求最小公倍数和最大公约数

关于gcd函数解最大公约数

noip2000 乘积最大

乘积最大的子数组 动态规划

1856. 子数组最小乘积的最大值