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

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

算法描述:

Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.

Example 1:

Input: [2,3,-2,4]Output: 6Explanation: [2,3] has the largest product 6.

Example 2:

Input: [-2,0,-1]Output: 0Explanation: The result cannot be 2, because [-2,-1] is not a subarray.

解题思路:用动态规划求解。最小值(最大值)分三种情况:当前值,当前值乘以前一个最小值(最大值),以及当前值乘以前一个最大值(最小值)。递推式为:

minVale[i] = min(min(nums[i],nums[i]*maxValue[i-1]),nums[i]*minValue[i-1]);

maxVale[i] = max(max(nums[i],nums[i]*maxValue[i-1]),nums[i]*minValue[i-1]);

内存空间还可以压缩。

int maxProduct(vector
& nums) { if(nums.size()==0) return 0; if(nums.size()==1) return nums[0]; vector
minVal(nums.size(),0); vector
maxVal(nums.size(),0); minVal[0] = min(nums[0],0); maxVal[0] = max(nums[0],0); int res = maxVal[0]; for(int i=1; i < nums.size(); i++){ minVal[i] = min(min(nums[i], nums[i]*maxVal[i-1]),minVal[i-1]*nums[i]); maxVal[i] = max(max(nums[i], nums[i]*minVal[i-1]),maxVal[i-1]*nums[i]); if(res < maxVal[i]) res = maxVal[i]; } return res; }

 

转载于:https://www.cnblogs.com/nobodywang/p/10354495.html

你可能感兴趣的文章
<转>云主机配置OpenStack使用spice的方法
查看>>
java jvm GC 各个区内存参数设置
查看>>
[使用帮助] PHPCMS V9内容模块PC标签调用说明
查看>>
基于RBAC权限管理
查看>>
数学公式的英语读法
查看>>
留德十年
查看>>
迷人的卡耐基说话术
查看>>
PHP导出table为xls出现乱码解决方法
查看>>
PHP问题 —— 丢失SESSION
查看>>
Java中Object类的equals()和hashCode()方法深入解析
查看>>
数据库
查看>>
dojo.mixin(混合进)、dojo.extend、dojo.declare
查看>>
Python 数据类型
查看>>
iOS--环信集成并修改头像和昵称(需要自己的服务器)
查看>>
PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...
查看>>
教程前言 - 回归宣言
查看>>
PHP 7.1是否支持操作符重载?
查看>>
Vue.js 中v-for和v-if一起使用,来判断select中的option为选中项
查看>>
Java中AES加密解密以及签名校验
查看>>
定义内部类 继承 AsyncTask 来实现异步网络请求
查看>>