package arrays;/**题目:求连续子序列的最大乘积* @Author Gavin* @date 2022年01月09日 15:10*/public class array_14 {/*** 解题思路:* 要求连续子序列的最大乘积,我们需要知道一点就是一个最小负数乘以一个负数就可能* 为一个最大的正数,所以我们需要把最小的负数也保存起来*/public static int solution(int[] nums){if(nums==null||nums.length==0)return 0;int max=nums[0],curMax=nums[0],curMin=nums[0];for (int i = 1; i < nums.length; i++) {//核心点就是连续乘以每一个元素,要么是最大,要么就是最小//curMax表示当前正在处理的最大值,核心点,当连续正数乘积之后遇到负数后的第一个正数//curMax值就是这个正数的值,相当于从负数之后重新开始计算最大连续子序列乘积了//同理,负数也一样int a=curMax*nums[i],b=curMin*nums[i],c=nums[i];curMax=max(a,b,c);curMin=min(a,b,c);max=Math.max(max,curMax);}return max;}public static int max(int a,int b,int c){return Math.max(Math.max(a,b),c);}public static int min(int a,int b,int c){return Math.min(Math.min(a,b),c);}public static void main(String[] args) {int[] nums=new int[]{2,0,-1,3,4};System.out.println(solution(nums));}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。