子数组最大乘积

不念不忘少年蓝@ 2022-08-18 02:15 335阅读 0赞

给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。

  1. class Solution {
  2. public:
  3. double maxProduct(vector<double> arr) {
  4. if (arr.empty())
  5. {
  6. return 0;
  7. }
  8. double maxNum = arr[0];
  9. double minNum = arr[0];
  10. double res = arr[0];
  11. double maxEnd = 0;
  12. double minEnd = 0;
  13. int i = 0;
  14. /* max(arr[i])处的最大值和最小值在以下三个选项中
  15. max(arr[i-1]) * arr[i]
  16. min(arr[i-1]) * arr[i]
  17. arr[i]
  18. */
  19. for(i = 1; i < arr.size(); i++)
  20. {
  21. maxEnd = maxNum * arr[i];
  22. minEnd = minNum * arr[i];
  23. maxNum = max(max(maxEnd, minEnd), arr[i]);
  24. minNum = min(min(maxEnd, minEnd), arr[i]);
  25. res = max(res, maxNum);
  26. }
  27. return res;
  28. }
  29. };

发表评论

表情:
评论列表 (有 0 条评论,335人围观)

还没有评论,来说两句吧...

相关阅读

    相关 152. 乘积数组

    打卡!!!每日一题 今天继续为大家分享一道动态规划类型的题目。 题目描述: > 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一

    相关 乘积数组

    一、前言 回顾前文[《最大子数组》][Link 1],求解的是最高点到最低点差值,后经转换为累加和最大的子数组。对这个问题再扩展一下,将加给为乘,连续乘积最大的数组怎样求

    相关 152.乘积数组

    //给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 // // 示例 1: // 输入