这题如果没有负数和0,答案就很简单了,所有数的乘积。有负数和0就要复杂一些。
-
先考虑只有正数和负数而没有 0 的情况:
- 负数是偶数个。答案也很简单,所有数的乘积。
- 负数是奇数个。那就要枚举这个负数位置,将序列分成两部分,取乘积大的那部分。
-
然后再考虑数据中有 0 的情况,这时我们可以将整个序列以 0 进行分割成多个子序列,每个子序列的处理和情况 1 一样。
class Solution { public: int noZero(int A[], int start, int end) { // 没有 0 的子序列 int ans = A[start], left = 1, right = 1, negCnt = 0; for(int i = start; i <= end; ++i) { right *= A[i]; if(A[i] < 0) { negCnt++; // 计数负数的个数 } } if(negCnt&1) { // 奇数个负数 for(int i = start; i < end; ++i) { left *= A[i]; right /= A[i]; ans = max(max(left, right), ans); } } else { // 偶数个负数 ans = right; } return ans; } int maxProduct(int A[], int n) { int ans = A[0], start = 0, end = 0, i = 0, hasZero = 0; while(i < n) { while(i < n && A[i] == 0) { i++; hasZero = 1; // 标记数据中有 0 } start = i; while(i < n && A[i] != 0) { i++; } end = i - 1; if(end >= start) { // 以 0 分割成多个子串 int tmp = noZero(A, start, end); if(tmp > ans) { ans = tmp; } } } if(hasZero && ans < 0) { ans = 0; } return ans; } };
相关推荐
java java_leetcode题解之Maximum Product Subarray.java
python python_leetcode题解之152_Maximum_Product_Subarray.py
javascript js_leetcode题解之152-maximum-product-subarray.js
46. Maximum Product Subarray:找出一个数字序列中乘积最大的连续子序列。 47. Coins in a Line:n 个硬币排成一行,两个玩家轮流拿走左边或右边的一堆硬币,求得胜策略。 【二分搜索】 48. Search Insert ...
leetcode写题闪退 #*的多少代表此题的有意思程度 有几题第一次写的时候思绪比较混乱: *****Regular Expression Matching 2014.10.29 对于Find Minimum in Rotated Sorted Array II 和 Find Minimum in Rotated ...
318| [Maximum Product of Word Lengths](https://leetcode.com/problems/maximum-product-of-word-lengths/) | [C++](./C++/maximum-product-of-word-lengths.cpp) [Python](./Python/maximum-product-of-word-...
对于每一道算法题会总结代码、时间复杂度以及一些好的blog排序(sort)数组(...SubarrayLeetCode 152 Maximum Product SubarrayLintCode 138 Subarray SumLintCode 139 Subarray Sum ClosestLeetCode 392 Is Subseq
Maximum Product Subarray等。这类题目通常要求读者使用动态规划来解决问题,例如使用DP数组来记录状态、使用递归来计算结果等。 6. 排序和查找类题目 排序和查找类题目是LeetCode原题中的一个基础类题目,本文中...
leetcode 和 oj LeetCode 解决方案 Java 版 Leetcode 问题分类 细绳 8 字符串到整数 ...oj_152_maximum_product_subarray / SRC /溶液/ oj_236_lowest_common_ancestor_of_bt / notes.md SRC /溶液/ oj
leetcode二维数组搜索leetcode 对于 Leetcode ...最大积子./152_maximum_product_subarray.c ./9_palindrome_number.c : 回文数,O(1)空间复杂度 ./14_longest_common_prefix.c : 最长公共前缀 ./19_Remo
46. Maximum Product Subarray:计算子数组的最大乘积。 47. Coins in a Line:动态规划解决博弈问题,如Nim游戏。 八、二分查找 48. Search Insert Position:查找插入位置。 49. Find Minimum in Sorted Rotated ...
lru缓存leetcode 力扣_30天 力扣 30 天挑战赛 日 问题描述 问题和解决方案链接 Git 解决方案页面 1 SINGLE NUMBER 2 HAPPY NUMBER 3 MAXIMUM SUBARRAY 4 Move Zeroes 5 Best Time to Buy and Sell Stock II 6 GROUP ...
6. **Maximum Product Subarray** (最大乘积子数组) 类似于最大子数组和,但需要考虑负数的影响,可以同时维护最大正乘积和最大负乘积。 7. **Best Time to Buy and Sell Stock** 系列问题 股票买卖问题,涉及到...