http://blog.csdn.net/v_july_v/article/details/8701148

假设数组为a[],直接利用动归来求解,考虑到可能存在负数的情况,我们用Max来表示以a结尾的最大连续子串的乘积值,用Min表示以a结尾的最小的子串的乘积值,那么状态转移方程为:

       Max=max{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};
       Min=min{a[i], Max[i-1]*a[i], Min[i-1]*a[i]};
    初始状态为Max[0]=Min[0]=a[0]。

 #include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
class Solution {
public:
int maxProduct(int A[], int n) {
int *maxArray = new int[n];
int *minArray = new int[n];
maxArray[] = minArray[] = A[];
int result=maxArray[];
for (int i = ; i < n; i++)
{
maxArray[i] = max(max(maxArray[i-]*A[i],minArray[i-]*A[i]),A[i]);
minArray[i] = min(min(maxArray[i-]*A[i],minArray[i-]*A[i]),A[i]);
result = max(result,maxArray[i]);
}
return result;
}
};
int main()
{
Solution s;
int n = ;
int a[] = {,,-,};
cout << s.maxProduct(a,)<<endl;
return ;
}

==============================================================================================

LinkedIn - Maximum Sum/Product Subarray

Maximum Sum Subarray是leetcode原题,跟Gas Station的想法几乎一模一样。解答中用到的结论需要用数学简单地证明一下。

1
2
3
4
5
6
7
8
9
10
11
12
public int maxSubArray(int[] A) {
    int sum = 0;
    int max = Integer.MIN_VALUE;
    for (int i = 0; i < A.length; i++) {
        sum += A[i];
        if (sum > max)
            max = sum;
        if (sum < 0)
            sum = 0;
    }
    return max;
}

Maximum Product Subarray其实只需要不断地记录两个值,max和min。max是到当前为止最大的正product,min是到当前为止最小的负product,或者1。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public int maxProduct(int[] A) {
    int x = 1;
    int max = 1;
    int min = 1;
    for (int i = 0; i < A.length; i++) {
        if (A[i] == 0) {
            max = 1;
            min = 1;
        } else if (A[i] > 0) {
            max = max * A[i];
            min = Math.min(min * A[i], 1);
        } else {
            int temp = max;
            max = Math.max(min * A[i], 1);
            min = temp * A[i];
        }
        if (max > x)
            x = max;
    }
    return x;
}

http://shepherdyuan.wordpress.com/2014/07/23/linkedin-maximum-sumproduct-subarray/

最新文章

  1. HiHo Coder字典树 TrieTree
  2. 常用数据库的驱动程序及JDBC URL:
  3. Socket通信代码(原理)
  4. js 获取当前焦点所在的元素、给元素和input控件添加键盘监听事件、添加页面级的键盘监听事件
  5. 第21/24周 性能监控(PAL工具)
  6. Jmeter组件5. 逻辑控制
  7. 解决港版A1530 ios8 联通4G 电话打不进无法接通的问题,联通4G开关开启方法
  8. (六)WebRTC手记之WebRtcVideoEngine2模块
  9. drupal里面的ajax最粗浅的理解-流程
  10. asp.net mvc 页面传值的方法总结
  11. shell grep 高亮
  12. javascript中ajax post实例详解
  13. 安装kali之后
  14. angularJS 服务三
  15. C# 定时关机小程序
  16. 10个Python基础练习项目,你可能不会想到练手教程还这么有趣
  17. STM32云平台连接培训20180814
  18. mysql防注入
  19. python利用imap实现伪“无痕”取信
  20. U盘装win7系统

热门文章

  1. 《Paxos Made Simple》翻译(转)
  2. 20190430-PPK大佬的三个Viewport
  3. SQL语句模糊查询年月
  4. 那些H5用到的技术(5)——视差滚动效果
  5. (转)Heartbeat+DRBD+NFS高可用案例
  6. iOS 富文本属性
  7. Java 字符串(String)格式转json格式
  8. WEB下渗透测试经验技巧(全)[转载]
  9. 次讲解js中的回收机制是怎么一回事。
  10. Java中final修饰参数的作用