算法<Maximum Product Subarray>

来源:互联网 发布:任务多打码辅助软件 编辑:程序博客网 时间:2024/06/02 18:01

题目的要求是求一个一维数组中子串的最大乘积,比如:

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.

可以使用动态规划卡登算法来求解,但是需要注意的一点是,一个数与负数相乘可能会让最小的数变成最大的数,也有可能让最大的数变成最小的数,所以需要稍稍改动一下即可解决问题:

 public int maxProduct(int[] nums) {        if (nums.length < 1)            return 0;        int result = nums[0];        int max = nums[0];        int min = nums[0];        for (int i = 1; i < nums.length; i++) {            int preMax = max;            max = Math.max(nums[i], Math.max(nums[i] * max, nums[i] * min));            min = Math.min(nums[i], Math.min(nums[i] * min, nums[i] * preMax));            result = Math.max(max, result);        }        return result;    }
原创粉丝点击