博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode]Maximum Product Subarray
阅读量:6943 次
发布时间:2019-06-27

本文共 1285 字,大约阅读时间需要 4 分钟。

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.

这道题是找出数组中的一个子序列。要求这个子序列中数的乘积是全部子序列中最大的。

假设不考虑效率与优化问题,能够直接将全部子序列的组合列举出来。分别求它们的积,取最大值。例如以下:

int maxProduct(int A[], int n) {        int i = 0, j = 0,k=0;        int ans = 0;        int product = 0;        for (i = n; i > 0; i--){            for (j = 0; j <= n-i; j++){                for (k = j; k < i; k++){                    product += A[k];                }                if (product>ans){                    ans = product;                }                product = 0;            }        }        return ans;    }

可是这种效率是非常低的。换个思路能够想到,这道题就是一维动态规划中的“局部最优与全局最优”。所以须要维护两个变量,当前位置连续乘积的最大值curMax和最小值curMin。

最大值与最小值由下面三种情况能够得到:上一次的curMax*A[i],上一次的curMin*A[i],A[i]本身。例如以下:

int maxProduct(int A[], int n) {        int ans = A[0];        int curMin = A[0];        int curMax = A[0];        int cur = 1;        for (int i = 1; i < n; i++){            cur = curMax;            curMax = max(max(A[i],A[i]*curMax),A[i]*curMin);            curMin = min(min(A[i], A[i] * cur), A[i] * curMin);            ans = max(ans, curMax);        }        return ans;    }

版权声明:本文博客原创文章。博客,未经同意,不得转载。

你可能感兴趣的文章
gprof使用介绍【转】
查看>>
多标签分类
查看>>
【netcore基础】MVC API全局异常捕捉中间件ExceptionHandlerMiddleWare
查看>>
Python菜鸟快乐游戏编程_pygame(2)
查看>>
工作log
查看>>
SpringBoot系统列 2 - 配置文件,多环境配置(dev,qa,online)
查看>>
C# WPF MVVM QQ密码管家项目(8,完结篇:自动输入QQ号、密码)
查看>>
CentOS7 搭建FTP服务器
查看>>
Eureka多机高可用
查看>>
CopyOnWriteArrayList你都不知道,怎么拿offer?
查看>>
vscode vue 代码提示
查看>>
MS CRM 2011 JScript操作lookup control
查看>>
(轉貼) 如何解決Windows XP開機後停頓的問題? (OS) (Windows)
查看>>
微软build大会.net平台大事汇总
查看>>
关于抽象工厂的一些理解
查看>>
matlab练习程序(多圆交点)
查看>>
C#正则表达式编程(二):Regex类用法
查看>>
[转]不要一辈子靠技术生存
查看>>
Android文件操作总结
查看>>
myeclipse自带的derby去除
查看>>