Maximum Product Subarray -- LeetCode
来源:互联网 发布:淘宝店铺图标是什么 编辑:程序博客网 时间:2024/05/21 19:24
原题链接: https://oj.leetcode.com/problems/maximum-product-subarray/
这道题跟Maximum Subarray模型上和思路上都比较类似,还是用一维动态规划中的“局部最优和全局最优法”。这里的区别是维护一个局部最优不足以求得后面的全局最优,这是由于乘法的性质不像加法那样,累加结果只要是正的一定是递增,乘法中有可能现在看起来小的一个负数,后面跟另一个负数相乘就会得到最大的乘积。不过事实上也没有麻烦很多,我们只需要在维护一个局部最大的同时,在维护一个局部最小,这样如果下一个元素遇到负数时,就有可能与这个最小相乘得到当前最大的乘积和,这也是利用乘法的性质得到的。代码如下:
这道题跟Maximum Subarray模型上和思路上都比较类似,还是用一维动态规划中的“局部最优和全局最优法”。这里的区别是维护一个局部最优不足以求得后面的全局最优,这是由于乘法的性质不像加法那样,累加结果只要是正的一定是递增,乘法中有可能现在看起来小的一个负数,后面跟另一个负数相乘就会得到最大的乘积。不过事实上也没有麻烦很多,我们只需要在维护一个局部最大的同时,在维护一个局部最小,这样如果下一个元素遇到负数时,就有可能与这个最小相乘得到当前最大的乘积和,这也是利用乘法的性质得到的。代码如下:
public int maxProduct(int[] A) { if(A==null || A.length==0) return 0; if(A.length == 1) return A[0]; int max_local = A[0]; int min_local = A[0]; int global = A[0]; for(int i=1;i<A.length;i++) { int max_copy = max_local; max_local = Math.max(Math.max(A[i]*max_local, A[i]), A[i]*min_local); min_local = Math.min(Math.min(A[i]*max_copy, A[i]), A[i]*min_local); global = Math.max(global, max_local); } return global;}这道题是一道很不错的面试题目,因为Maximum Subarray这道题过于常见了,所以可能大部分人都做过,这道题模型类似,但是又有一些新的考点,而且总体还是比较简单,无论是思路上还是实现上,又能考察动态规划,个人还是比较喜欢的哈。
11 2
- Maximum Product Subarray 【LeetCode】
- [LeetCode] Maximum Product Subarray
- leetcode-Maximum Product Subarray
- Maximum Product Subarray -- LeetCode
- LeetCode-Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- 【LeetCode】Maximum Product Subarray
- leetcode:Maximum Product Subarray
- leetcode: Maximum Product Subarray
- Leetcode: Maximum Product Subarray
- [LeetCode]Maximum Product Subarray
- Leetcode Maximum Product Subarray
- [Leetcode]Maximum Product Subarray
- Leetcode--Maximum Product Subarray
- Maximum Product Subarray [leetcode]
- LeetCode | Maximum Product Subarray
- LeetCode-Maximum Product Subarray
- 导航固定的第二种方法
- 10.javaweb学习之js
- 查漏补缺2(面试小题目)
- C#格式化字符串大全
- dnw在linux下的安装方法
- Maximum Product Subarray -- LeetCode
- 数据结构:链表
- zookeeper本机伪集群模式配置,坑人的配置。
- linux touch 命令
- 【android】在eclipse中更改应用包名及源码包名
- 第一篇—开端
- C# Slugify方法
- C# URL操作
- .htaccess实现301网页永久重定向及302临时重定向