【数组】Maximum Product Subarray
2016-01-10 20:55
309 查看
题目:
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array
the contiguous subarray
思路:
其实子数组乘积最大值的可能性为:累乘的最大值碰到了一个正数;或者,累乘的最小值(负数),碰到了一个负数。所以每次要保存累乘的最大(正数)和最小值(负数)。同时还有一个选择起点的逻辑,如果之前的最大和最小值同当前元素相乘之后,没有当前元素大(或小)那么当前元素就可作为新的起点。例如,前一个元素为0的情况,{1,0,9,2},到9的时候9应该作为一个最大值,也就是新的起点,{1,0,-9,-2}也是同样道理,-9比当前最小值还小,所以更新为当前最小值。
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.
思路:
其实子数组乘积最大值的可能性为:累乘的最大值碰到了一个正数;或者,累乘的最小值(负数),碰到了一个负数。所以每次要保存累乘的最大(正数)和最小值(负数)。同时还有一个选择起点的逻辑,如果之前的最大和最小值同当前元素相乘之后,没有当前元素大(或小)那么当前元素就可作为新的起点。例如,前一个元素为0的情况,{1,0,9,2},到9的时候9应该作为一个最大值,也就是新的起点,{1,0,-9,-2}也是同样道理,-9比当前最小值还小,所以更新为当前最小值。
/** * @param {number[]} nums * @return {number} */ var maxProduct = function(nums) { var pro=nums[0],maxpro=nums[0],minpro=nums[0]; for(var i=1;i<nums.length;i++){ var maxtemp=maxpro; maxpro=Math.max(Math.max(maxpro*nums[i],minpro*nums[i]),nums[i]); minpro=Math.min(Math.min(maxtemp*nums[i],minpro*nums[i]),nums[i]); pro=Math.max(maxpro,pro); } return pro; };
相关文章推荐
- 语言文法
- 冒泡排序的推导
- 停车管理系统
- Oracle两表关联(join)更新字段值一张表到另一张表
- Oracle两表关联(join)更新字段值一张表到另一张表
- Android Animation使用
- Eclipse调试Android工具-DDMS
- Linux gprof命令
- epoll用法整理
- 春风醉人,暖意微醺
- jQuery中的事件
- SAWV Eclipse Plugin
- 原始XML资源
- 飘逸的python - __new__、__init__、__call__傻傻分不清
- 清除图片周围的空白区域
- 浅谈 举家搬迁静态文件到CDN
- GIT - 一些基本概念
- C语言 typedef的使用
- 【Java】使用Json-lib序列化关联对象的异常解决
- [DEV]How to compile TWRP touch recovery