LeetCode 152. Maximum Product Subarray

来源:互联网 发布:北京网络咨询医生招聘 编辑:程序博客网 时间:2024/06/03 15:43

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.

分别创建一个最大、最小数组用于记录数据,当数据项小于零从最小数组中选择元素,当数据项大于零时从最大数组中选择元素

java

class Solution {    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 val = 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]);            }            val = Math.max(val, max[i]);        }        return val;    }}

python

class Solution(object):    def maxProduct(self, nums):        """        :type nums: List[int]        :rtype: int        """        if nums is None or len(nums) == 0:            return 0        maxArr, minArr = [nums[0]] * len(nums), [nums[0]] * len(nums)        val = nums[0]        for i in range(1, len(nums)):            maxArr[i], minArr[i] = nums[i], nums[i]            if nums[i] > 0:                maxArr[i] = max(maxArr[i], maxArr[i - 1] * nums[i])                minArr[i] = min(minArr[i], minArr[i - 1] * nums[i])            else:                maxArr[i] = max(maxArr[i], minArr[i - 1] * nums[i])                minArr[i] = min(minArr[i], maxArr[i - 1] * nums[i])            val = max(val, maxArr[i])        return val


原创粉丝点击