Maximum Product Subarray

Title:

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

For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.

对于Product Subarray,要考虑到一种特殊情况,即负数和负数相乘:如果前面得到一个较小的负数,和后面一个较大的负数相乘,得到的反而是一个较大的数,如{2,-3,-7},所以,我们在处理乘法的时候,除了需要维护一个局部最大值,同时还要维护一个局部最小值,由此,可以写出如下的转移方程式:

max_copy[i] = max_local[i]
max_local[i + 1] = Max(Max(max_local[i] * A[i], A[i]),  min_local * A[i])

min_local[i + 1] = Min(Min(max_copy[i] * A[i], A[i]),  min_local * A[i])

class Solution {
public:
int maxProduct(vector<int>& nums) {
int pmin = nums[];
int pmax = nums[];
int result = nums[];
for (int i = ; i < nums.size(); i++){
int t1= pmax * nums[i];
int t2= pmin * nums[i];
pmax = max(nums[i],max(t1,t2));
pmin = min(nums[i],min(t1,t2));
result = max(result,pmax);
}
return result;
}
};

Maximum Subarray

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

For example, given the array [−2,1,−3,4,−1,2,1,−5,4],
the contiguous subarray [4,−1,2,1] has the largest sum = 6.

http://blog.csdn.net/joylnwang/article/details/6859677

http://blog.csdn.net/linhuanmars/article/details/21314059

class Solution{
public:
int maxSubArray(int A[], int n) {
int maxSum = A[];
int sum = A[];
for (int i = ; i < n; i++){
if (sum < )
sum = ;
sum += A[i];
maxSum = max(sum,maxSum);
}
return maxSum;
}
};

扩展:子序列之和最接近于0

先对数组进行累加,这样得到同样长度的数组,然后,对数组排序,对排序后的数组相邻的元素相减计算绝对值,并比较大小。

class Solution{
public:
vector<int> simple(vector<int> nums,int target){
int min_gap = INT_MAX;
int index_min ;
int index_max;
for (int i = ; i < nums.size(); i++){
int sum = ;
for (int j = i; j < nums.size(); j++){
sum += nums[j];
if (min_gap > abs(sum-target)){
min_gap = abs(sum-target);
index_min = i;
index_max = j;
}
}
}
vector<int> result(nums.begin()+index_min,nums.begin()+index_max+);
return result;
}
vector<int> choose(vector<int> nums, int target){
vector<pair<int,int> > addSums(nums.size());
addSums[] = make_pair(nums[],);
for (int i =; i < nums.size(); i++){
addSums[i] = make_pair(addSums[i-].first + nums[i],i);
}
sort(addSums.begin(),addSums.end());
int min_gap = INT_MAX;
int index = -;
for (int i = ; i < addSums.size(); i++){
int t = abs(addSums[i].first - addSums[i-].first);
if (min_gap > t){
min_gap = t;
index = i;
}
}
int index_min = min(addSums[index].second,addSums[index-].second);
int index_max = max(addSums[index].second,addSums[index-].second);
vector<int> result(nums.begin()+index_min+,nums.begin()+index_max+);
return result;
}
};

这种做法我没有想到如何扩展到任意的t上面

LeetCode: Maximum Product Subarray && Maximum Subarray &子序列相关的更多相关文章

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

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

  2. LeetCode Maximum Product Subarray(枚举)

    LeetCode Maximum Product Subarray Description Given a sequence of integers S = {S1, S2, . . . , Sn}, ...

  3. [Swift]LeetCode152. 乘积最大子序列 | Maximum Product Subarray

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

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

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

  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】Maximum Product Subarray 求连续子数组使其乘积最大

    Add Date 2014-09-23 Maximum Product Subarray Find the contiguous subarray within an array (containin ...

  8. [LeetCode]152. Maximum Product Subarray

    This a task that asks u to compute the maximum product from a continue subarray. However, you need t ...

  9. leetcode 53. Maximum Subarray 、152. Maximum Product Subarray

    53. Maximum Subarray 之前的值小于0就不加了.dp[i]表示以i结尾当前的最大和,所以需要用一个变量保存最大值. 动态规划的方法: class Solution { public: ...

随机推荐

  1. NHibernate 基础

    install-package nhibernate install-package nunit Customer.cs public class Customer { public virtual ...

  2. PAT-乙级-1046. 划拳(15)

    1046. 划拳(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 划拳是古老中国酒文化的一个有趣的组成部分 ...

  3. JavaScript 函数参数是传值(byVal)还是传址(byRef)?

    对于“JavaScript 函数参数是传值(byVal)还是传址(byRef)”这个问题,普遍存在一个误区:number,string等“简单类型”是传值,Number, String, Object ...

  4. javax.mail.MessagingException: 501 Syntax: HELO hostname Linux端异常解决

    在项目里面使用javamail在window环境正常,放在服务器上面的时候抛出异常javax.mail.MessagingException: 501 Syntax: HELO hostname ,原 ...

  5. POJ 3421

    X-factor Chains Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5111   Accepted: 1622 D ...

  6. POJ 2029 Get Many Persimmon Trees(DP||二维树状数组)

    题目链接 题意 : 给你每个柿子树的位置,给你已知长宽的矩形,让这个矩形包含最多的柿子树.输出数目 思路 :数据不是很大,暴力一下就行,也可以用二维树状数组来做. #include <stdio ...

  7. [SQL Server 系] -- 模糊查询

    SQL Server中的通配符有下面四种 通配符 说明 % 包含零个或多个字符的任意字符串 _(下划线) 任意单个字符 [ ] 任意在指定范围或集合中的单个字符 [^ ] 任意不在指定范围或集合中的单 ...

  8. ASP.NET连接数据库并获取数据

    关键词:连接对象的用法SqlConnection,SqlCommand,SqlDataAdapter *数据访问方式的写法 工具/原料 VS SQL SERVER 2012 R2 方法/步骤1: 1. ...

  9. Tomcat就是个容器,一种软件

    1.tomcat就是一个容器而已,一个软件,运行在java虚拟机. 2.tomcat是一种能接收http协议的软件,java程序猿自己也可以写出http解析的服务器啊. 3.tomcat支持servl ...

  10. Visual StudioTools for Unity 使用技巧2

    在之前的博客介绍了 Visual Studio Tools for Unity的安装和使用. http://www.cnblogs.com/petto/p/3886811.html 其实这个工具还提供 ...