乘积最大子数组

给你一个整数数组nums,请你找出数组中乘积最大的非空连续子数组
(该子数组中至少包含一个数字),并返回该子数组所对应的乘积
测试用例的答案是一个32位整数
子数组是数组的连续子序列。

第一反应就是动态规划,然后记录每个位置的最大子数组.不过这样总是有问题
正确的方式是:使用动态规划,但是要同时记录每个位置的最大值和最小值,这是因为

  • 如果当前位置是一个正数,那么它希望前面dp[i-1]位置的结果越大越好
  • 如果当前位置是一个负数,那么它希望前面dp[i-1]位置的结果越小越好

所以单纯的如果只使用一个动态规划记录最大和的话 每个位置的结果并非是最优的解,当记录下最大和最小时,当前位置的最优一定能够找到

public int maxProduct(int[] nums) {int len = nums.length;int[] minDp = Arrays.copyOf(nums, nums.length);int[] maxDp = Arrays.copyOf(nums, nums.length);int ans = maxDp[0];for (int i = 1; i < len; i++) {maxDp[i] = Math.max(nums[i], Math.max(nums[i] * maxDp[i - 1], nums[i] * minDp[i - 1]));minDp[i] = Math.min(nums[i], Math.min(nums[i] * maxDp[i - 1], nums[i] * minDp[i - 1]));ans = Math.max(ans, maxDp[i]);}return ans;}

还可以进行优化空间复杂度

public int maxProduct2(int[] nums) {int len = nums.length;int minDp = nums[0];int maxDp = nums[0];int ans = nums[0];for (int i = 1; i < len; i++) {int max = maxDp, min = minDp;maxDp = Math.max(nums[i], Math.max(nums[i] * max, nums[i] * min));minDp = Math.min(nums[i], Math.min(nums[i] * max, nums[i] * min));ans = Math.max(ans, maxDp);}return ans;}

CodeTop097 乘积最大子数组相关推荐

  1. 152. 乘积最大子数组

    Title 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积. 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: ...

  2. 动态规划——乘积最大子数组(Leetcode 152)

    题目选自Leetcode 152. 乘积最大子数组 题目描述: 解题思路: 解题代码: class Solution { public:int maxProduct(vector<int> ...

  3. 最大连续子数组和 动态规划_每日LeetCode,乘积最大子数组

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

  4. 算法-----------乘积最大子数组(Java版本)

    题目: 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积.示例 1:输入: [2,3,-2,4] 输出: 6 解释: 子数组 ...

  5. 乘积最大子数组—leedcode152

    给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积. 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2 ...

  6. leetcode152. 乘积最大子数组

    给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积. 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2 ...

  7. [Leedcode][JAVA][第152题][乘积最大子数组][动态规划]

    [问题描述][中等] 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积.示例 1:输入: [2,3,-2,4] 输出: 6 解 ...

  8. Leetcode--152. 乘积最大子数组(java)

    给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积. 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2 ...

  9. 152 乘积最大子数组(动态规划)

    1. 问题描述: 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积. 示例 1: 输入: [2,3,-2,4] 输出: 6 解 ...

最新文章

  1. mysql的主从复制功能_Mysql的主从复制功能
  2. pandas dataframe与series
  3. 吃完降压药多久能睡觉 降压药什么时候吃好
  4. MySQL ORDER BY:对查询结果进行排序
  5. javafx + jfoenix相关学习资料地址整理
  6. OpenCV的AdaptiveThreshold函数
  7. “约见”面试官系列之常见面试题第二十四篇之vue-router使用(建议收藏)
  8. OpenXLSX 字段读取问题
  9. 最长升序子串1231
  10. java接口的应用举例
  11. Nodejs入门[在互联网上非常经常,非常疯狂的一个转载]
  12. 实战 | Java 流之Stream,Lambda以及日期
  13. python编写脚本教程_python编写一个会算账的脚本的示例代码
  14. Mac小技巧:在mac上怎么把png转换成jpg
  15. winRAR 离购买许可只剩xx天
  16. 前后端、数据库时间格式化方法
  17. 3-----A Forcast for Bicycle Rental Demand Based on Random Forests and Multiple Linear Regression
  18. oracle dul 扫描磁盘,案例:Oracle dul数据挖掘 磁盘损坏dul提取数据文件中表的数据及l...
  19. python进行Excel处理
  20. 监控Kafka(kafka_exporter)

热门文章

  1. Studing Day1 - python基础1
  2. 空间统计说历史:奥德修斯的归家之路
  3. windows注册表_改进Windows的20个最佳注册表技巧
  4. 给Unity开发者的C#内存管理(第一部分) C# Memory Management for Unity Developers (part 1 of 3)
  5. TestCenter测试管理工具功能详解三(H)
  6. 惠普笔记本恢复出厂系统
  7. 中国生物医药项目投资机会及运营前景策略研究报告2021-2027年
  8. python添加元素到数组开头_python添加元素到数组开头_Python语法总结(纯干货)...
  9. MLNLP顶会论文发表总榜:谷歌最狂,清北入前十,周明、张岳、刘挺华人前三
  10. 林业调查规划设计资质申办流程及要求?