LeetCode之Maximum Product Subarray
来源:互联网 发布:例外女装淘宝 编辑:程序博客网 时间:2024/06/05 00:13
/*如果数组中没有元素0,那么可以按照如下方法处理:1.统计数组中负数的个数;2.如果负数个数为偶数,则结果为数组所有元素相乘;3.如果负数个数为奇数,结果为一下2种情况的最大值: 1)第一个负数后所有元素的乘积; 2)最后一个负数前的所有元素的乘积;所有,可以根据数组中0所在的位置,将原数组分割成一段一段不含0的子数组,用如上方法进行处理,获得最后结果。时间复杂度为O(n)。*/class Solution {public:int maxProduct(vector<int>& nums) {if(nums.size() == 1) return nums[0];int first(0);while(first < nums.size() && nums[first] == 0) ++first;int tmp_res(INT_MIN);if(first == nums.size()) return 0;int res(INT_MIN);for(int i = first; i < nums.size(); ){//求取子数组的最大连续乘积值if(nums[i] == 0){int tmp = maxProduct(nums, first, i-1);res = max(res, tmp);tmp_res = 0;first = i;while(nums[first] == 0) ++first;i = first;}else if(i == nums.size() - 1){ int tmp = maxProduct(nums, first, i); res = max(res, tmp); break;}else ++i;}return max(res, tmp_res);}int maxProduct(vector<int> &nums, int left, int right){//获得不含0元素的子数组的最大连续乘积if(left == right) return nums[left];int first(INT_MAX), last(INT_MIN), neg_count(0);for(int i = left; i < right + 1; ++i){if(nums[i] < 0){if(i < first) first = i;if(i > last) last = i;++neg_count;}}if((neg_count & 1) == 0){//偶数个负数int res(1);for(int i = left; i < right + 1; ++i) res *= nums[i];return res;}else{int res1(1);for(int i = first + 1; i < right + 1; ++i) res1 *= nums[i];int res2(1);for(int i = left; i < last; ++i) res2 *= nums[i];return max(res1, res2);}}};
0 0
- 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
- 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
- 什么是大数据?
- Filter配置会话超时跳转页面
- 机房收费系统——总结篇
- PAT Basic level practice 23
- Spring笔记(第一弹:简单模拟Spring IOC)
- LeetCode之Maximum Product Subarray
- 质数中的质数 SDUT 3305
- 机房收费系统总结篇(3)--------验收总结
- 17 Letter Combinations of a Phone Number
- centos 7.0 mysql的启动问题
- nginx负载均衡配置---nginx的学习之路
- Flappy Bird
- 开启java生活
- hdu5407CRB and Candies 求逆元