乘积最大子序列,lintcode
来源:互联网 发布:淘宝袜子尺码 编辑:程序博客网 时间:2024/06/09 15:55
找出一个序列中乘积最大的连续子序列(至少包含一个数)。
样例
比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6。
解题思路:遍历数组,每次纪录当前位置的乘积最大值和成绩最小值,也就是max(nums[i],max[i-1]*nums[i],min[i-1]*nums[i])和min(nums[i],max[i-1]*nums[i],min[i-1]*nums[i])。
一刷没ac
O(n),O(n)的解法
public class Solution { /** * @param nums: an array of integers * @return: an integer */ public int maxProduct(int[] nums) { if(nums == null || nums.length == 0) return 0; int[] max = new int[nums.length]; int[] min = new int[nums.length]; max[0] = nums[0]; min[0] = nums[0]; int res = nums[0]; for(int i = 1; i < nums.length; i++){ max[i] = min[i] = nums[i]; if(nums[i] > 0){ max[i] = Math.max(max[i], max[i-1] * nums[i]); min[i] = Math.min(min[i], min[i-1] * nums[i]); }else { max[i] = Math.max(max[i], min[i-1] * nums[i]); min[i] = Math.min(min[i], max[i-1] * nums[i]); } if(max[i] > res) res = max[i]; } return res; }}
O(n),O(1)的解法
public class Solution { /** * @param nums: an array of integers * @return: an integer */ public int maxProduct(int[] nums) { if(nums == null || nums.length == 0) return 0; int max = nums[0]; int min = nums[0]; int res = nums[0]; for(int i = 1; i < nums.length; i++){ int tmp = max; max = Math.max(Math.max(nums[i], max*nums[i]), min*nums[i]); min = Math.min(Math.min(nums[i], tmp*nums[i]), min*nums[i]); if(res < max) res = max; } return res; }}
0 0
- LintCode-乘积最大子序列
- LintCode -- 乘积最大子序列
- lintcode- 乘积最大子序列
- LintCode:乘积最大子序列
- 乘积最大子序列,lintcode
- lintcode--乘积最大子序列
- Lintcode 乘积最大子序列
- 乘积最大子序列-LintCode
- lintcode--乘积最大子序列
- lintCode【91】乘积最大子序列
- LintCode:M-乘积最大子序列
- [Lintcode]Maximum Product Subarray乘积最大子序列
- lintcode刷题——乘积最大子序列
- 最大乘积子序列
- 最大子序列乘积
- 乘积最大子序列
- 乘积最大子序列
- 乘积最大子序列
- python学习笔记(17)--集合(set)详解
- 使用SwingWorker 点击按钮后,按钮不让点击,在处理完之后,显示为可点
- lavarel里非法登录
- JVM调优executor堆外内存和 连接时长
- 数据库版本管理工具Flyway——基础篇
- 乘积最大子序列,lintcode
- python实现二分查找
- Android数据绑定框架DataBinding
- 前端技术栈有哪些
- 安卓5.0以上系统notification中setTicker无效
- MySQL中的COMMIT
- [竞赛][比赛题解]Noip2016双日游
- Fragment基础知识
- 对象序列化为何要定义serialVersionUID