53. Maximum Subarray

之前的值小于0就不加了。dp[i]表示以i结尾当前的最大和,所以需要用一个变量保存最大值。

动态规划的方法:

class Solution {
public:
int maxSubArray(vector<int>& nums) {
vector<int> dp(nums.size());
int res = INT_MIN;
for(int i = ;i < nums.size();i++){
dp[i] = nums[i];
if(i > && dp[i-] >= )
dp[i] += dp[i-];
res = max(res,dp[i]);
}
return res;
}
};

152. Maximum Product Subarray

最小值可能是负数,这个值可能变成最大值。

dp[i]表示以i结尾当前的最大乘积,所以需要用一个变量保存最大值。

为什么每次要与nums[i]做对比,因为数组中可能存在0

动态规划的方法:

class Solution {
public:
int maxProduct(vector<int>& nums) {
vector<int> dp_max(nums.size());
vector<int> dp_min(nums.size());
dp_max[] = nums[];
dp_min[] = nums[];
int res = nums[];
for(int i = ;i < nums.size();i++){
dp_max[i] = max(dp_max[i-] * nums[i],max(dp_min[i-] * nums[i],nums[i]));
dp_min[i] = min(dp_max[i-] * nums[i],min(dp_min[i-] * nums[i],nums[i]));
res = max(res,dp_max[i]);
}
return res;
}
};

非动态规划,节省空间的方法:

https://blog.csdn.net/whuwangyi/article/details/39577455解法3

class Solution {
public:
int maxProduct(vector<int>& nums) {
int max = nums[];
int pre_max = nums[],pre_min = nums[];
int cur_max,cur_min;
for(int i = ;i < nums.size();i++){
cur_max = compare_max(pre_max*nums[i],pre_min*nums[i],nums[i]);
cur_min = compare_min(pre_max*nums[i],pre_min*nums[i],nums[i]);
pre_max = cur_max;
pre_min = cur_min;
max = cur_max > max ? cur_max : max;
}
return max;
}
int compare_max(int a,int b,int c){
int max = a;
if(b > max)
max = b;
if(c > max)
max = c;
return max;
}
int compare_min(int a,int b,int c){
int min = a;
if(b < min)
min = b;
if(c < min)
min = c;
return min;
}
};

leetcode 53. Maximum Subarray 、152. Maximum Product Subarray的更多相关文章

  1. leecode 每日解题思路 152 Maximun Product Subarray

    问题描述: 问题链接:152 Maximum Product Subarray 在经典的算法解析中, 有关的分治和动态规划的,经典题型之一就是求最大子段和, 这道题就是他的变形:求最大子段积; 这个问 ...

  2. LeetCode 53. 最大子序和(Maximum Subarray)

    53. 最大子序和 53. Maximum Subarray 题目描述 给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. LeetCode53. M ...

  3. [LeetCode]题解(python):152-Maximum Product Subarray

    题目来源: https://leetcode.com/problems/maximum-product-subarray/ 题意分析: 给定一个数组,这个数组所有子数组都有一个乘积,那么返回最大的乘积 ...

  4. LeetCode:152_Maximum Product Subarray | 最大乘积连续子数组 | Medium

    题目:Maximum Product Subarray Find the contiguous subarray within an array (containing at least one nu ...

  5. [LeetCode] 152. Maximum Product Subarray 求最大子数组乘积

    Given an integer array nums, find the contiguous subarray within an array (containing at least one n ...

  6. 152. Maximum Product Subarray - LeetCode

    Question 152. Maximum Product Subarray Solution 题目大意:求数列中连续子序列的最大连乘积 思路:动态规划实现,现在动态规划理解的还不透,照着公式往上套的 ...

  7. 求连续最大子序列积 - leetcode. 152 Maximum Product Subarray

    题目链接:Maximum Product Subarray solutions同步在github 题目很简单,给一个数组,求一个连续的子数组,使得数组元素之积最大.这是求连续最大子序列和的加强版,我们 ...

  8. 【刷题-LeetCode】152 Maximum Product Subarray

    Maximum Product Subarray Given an integer array nums, find the contiguous subarray within an array ( ...

  9. LeetCode 152. Maximum Product Subarray (最大乘积子数组)

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

随机推荐

  1. python实现加密的方式总结

    python实现加密的方式总结 原文地址 目录 基础知识扫盲 Base64 MD5 DES 3DES AES RSA 基础知识扫盲 对称加密 对称密钥加密 , 又叫私钥加密.即信息发送的方和接受方用一 ...

  2. TableView 两种Style Plain and Group 区别以及进阶使用

    一.UITableViewStylePlain 1.有多段时 段头停留(自带效果) 2.没有中间的间距和头部间距(要想有的重写UITableViewCell /UITableViewHeaderFoo ...

  3. linux下重启tomcat命令

    在Linux系统下,重启Tomcat使用命令操作的! 首先,进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看 ...

  4. horizon服务

    一.horizon 介绍: 理解 horizon Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizone 所提供的 DashBoard 服务 ...

  5. VS2013 删除"附加依赖项"中“继承的值”

    经过好几次尝试,都无法在VS2013中直接删除“继承的值”,于是另辟蹊径,找到了一种解决方法. 相对而言,在 VS2010 中干这件事会容易一点,或者说,成功率更高一点,于是,我的思路就是再装一个 V ...

  6. django middleware介绍

    Middleware Middleware是一个镶嵌到django的request/response处理机制中的一个hooks框架.它是一个修改django全局输入输出的一个底层插件系统. 每个中间件 ...

  7. java基础语法2-运算符与流程控制

    关键字-标识符-常量和变量-运算符-流程控制-方法-数组 5 运算符 算术运算符Arithmetic Operators 赋值运算符Assignment Operators 比较运算符Compare ...

  8. Hadoop中配置环境后重启失效解决方法

    Ubuntu下设置环境变量有三种方法,一种用于当前终端,一种用于当前用户,一种用于所有用户: 一:用于当前终端: 在当前终端中输入:export PATH=$PATH:<路径> 不过上面的 ...

  9. 对TypeScript进行研究

    1.npm install -g typescript 在编辑器,将下面的代码输入到greeter.ts文件里: function greeter(person) { return "Hel ...

  10. 15. ClustrixDB 管理数据分布

    本节使用的关键术语: Relation — ClustrixDB中的每个表都被称为“关系”. Representation — 在ClustrixDB中,每个索引都称为一个“Representatio ...