leetcode-152乘积最大子数组(两个转移方程的正确性证明)
1、dp数组的含义
maxDP[i]中存储 以nums[i]为结尾元素的子数组的最大乘积
minDP[i]中存储 以nums[i]为结尾元素的子数组的最小乘积
注意到:maxDP[i] >= minDP[i] for all i from 0 to nums.size()-1
2、根据maxDP[i]和minDP[i]的正负,分类讨论
情况1:
如果nums[i] == 0
maxDP[i] 等于 0, 注意:任何数字与0的乘积都是0
minDP[i] 等于 0, 注意:任何数字与0的乘积都是0 情况2:
如果nums[i] > 0
maxDP[i] 等于 max{ nums[i], if maxDP[i-1] <= 0
nums[i]*maxDP[i-1](反证法), if maxDP[i-1] > 0
}
注意:maxDP[i-1]的值,已经覆盖了所有情况,不必再考虑minDP[i-1] minDP[i] 等于 min{ nums[i], if minDP[i-1] > 0(不能往左乘,越乘越大)
nums[i]*minDP[i-1](反证法), if minDP[i-1] <= 0
}
注意:minDP[i-1]的值,已经覆盖了所有情况,不必再考虑maxDP[i-1]
情况3:
如果nums[i] < 0
maxDP[i] 等于 max{ nums[i]*minDP[i-1](反证法), if minDP[i-1] < 0
nums[i], if minDP[i-1] => 0
}
注意:minDP[i-1]的值,已经覆盖了所有情况,不必再考虑maxDP[i-1] minDP[i] 等于 min{ nums[i]*maxDP[i-1](反证法), if maxDP[i-1] > 0
nums[i], if maxDp[i-1] <= 0
}
注意:maxDP[i-1]的值,已经覆盖了所有情况,不必再考虑minDP[i-1] 综上,不论是maxDP[i]还是minDP[i],都是在maxDP[i-1]*nums[i],minDP[i-1]*nums[i],nums[i]这三个数中产生的
maxDP[i]是三个数中最大者,minDP[i]是三个数中最小者
maxDP[i] = max(maxDP[i-1]*nums[i], max(minDP[i-1]*nums[i], nums[i]))
minDP[i] = min(minDP[i-1]*nums[i], min(maxDP[i-1]*nums[i], nums[i]))
3、实现
class Solution {
public:
int maxProduct(vector<int>& nums) {
vector<int> minDP(nums), maxDP(nums);
int ans = nums[0];
for (int i = 1; i < nums.size(); i++) {
maxDP[i] = max(maxDP[i-1]*nums[i], max(minDP[i-1]*nums[i], nums[i]));
minDP[i] = min(minDP[i-1]*nums[i], min(maxDP[i-1]*nums[i], nums[i]));
if (maxDP[i] > ans)
ans = maxDP[i];
}
return ans;
}
};
leetcode-152乘积最大子数组(两个转移方程的正确性证明)的更多相关文章
- 1. 线性DP 152. 乘积最大子数组
152. 乘积最大子数组 https://leetcode-cn.com/problems/maximum-product-subarray/ func maxProduct(nums []int) ...
- [LeetCode] Maximum Subarray 最大子数组
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- Java实现 LeetCode 152 乘积最大子序列
152. 乘积最大子序列 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] ...
- [Leetcode] maximun subarray 最大子数组
Find the contiguous subarray within an array (containing at least one number) which has the largest ...
- leetcode 刷题(数组篇)152题 乘积最大子数组 (动态规划)
题目描述 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积. 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子 ...
- [LeetCode]152. 乘积最大子序列(DP)
题目 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6. 示 ...
- LeetCode | 152. 乘积最大子序列
原题(Medium): 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 思路: 遍历数组时且逐元素相乘时,如果遇到了0,在求乘积最大值的情况下,0左边的元素 ...
- LeetCode 152. 乘积最大子序列(Maximum Product Subarray)
题目描述 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6. ...
- leetcode 152. 乘积最大子序列 java
题目: 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6. ...
- [LeetCode] 152. Maximum Product Subarray 求最大子数组乘积
Given an integer array nums, find the contiguous subarray within an array (containing at least one n ...
随机推荐
- Spring Boot 整合 Logback 日志
Spring Boot 支持 Java Util Logging,Log4J,Log4J2 和 Logback 等日志框架,默认采用 Logback 日志. 在实际 Spring Boot 项目中使用 ...
- LeetCode-1765 地图中的最高点
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/map-of-highest-peak 题目描述 给你一个大小为 m x n 的整数矩阵 isWa ...
- 【Java-01-2】java基础-基本语法(2)(关系运算,if,循环)
1.关系/逻辑/条件 运算符,if语句 /* * 关系运算,if,循环 * 条件:condition * 注意逻辑运算符的短路特性 */ import java.io.*; public class ...
- 【Nginx】优化,增加线程
https://blog.csdn.net/cnskylee/article/details/127645806 众所周知,Nginx一款体积小巧,但是性能强大的软负载,主要被用作后端服务和应用的反向 ...
- java开发环境搭建 (JDK卸载与安装、配置)
一.window系统下java环境搭建 1.卸载JDK 查看安装目录:此电脑 -> 右键选择属性 -> 高级系统设置 -> 环境变量 -> 查看系统变量那一栏中的JAVA_HO ...
- vue2中请求函数防抖处理
- 使用 Fiddler Everywhere 进行抓包
使用 Fiddler Everywhere 进行抓包 开启各项必备功能 在打开浏览器之前需要先开启LiveTraffic为Capturing 然后点击像芯片一样的东西叫Decode(蓝色为开启状态)这 ...
- Nginx 虚拟主机中配置 server_name ⼀个server块中配置多个站点 ⼀个站点配置多个⼆级域名
⼀个server块中配置多个站点 server { listen 80; server_name ~^(www.)?(.+)$; index index.php index.html; root /h ...
- allure安装配置
代理节点配置allure 下载allure https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline 配置环境变 ...
- Wordpress指定关键词手动添加链接
方法:网站后台->外观->编辑->找到functions.php文件 wp-content/themes/当前外观/functions.php 在当前外观的functions.php ...