题解 | #乘积为正数的最长连续子数组#
乘积为正数的最长连续子数组
https://www.nowcoder.com/practice/0112b9b5a09048d89309f55ea666db91
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int[] nums=new int[n]; for (int i = 0; i < n; i++) { int num=sc.nextInt(); nums[i]=num; } int[] dpzs=new int[n];//到该位置乘积为正数的最长数组长度 int[] dpfs=new int[n];//到该位置乘积为负数的最长数组长度 dpzs[0]=nums[0]>0?1:0; dpfs[0]=nums[0]<0?1:0; int max=dpzs[0]; for (int i = 1; i < n; i++) { if(nums[i]==0){ dpzs[i]=0; dpfs[i]=0; }else if(nums[i]>0){ dpzs[i]=dpzs[i-1]+1; dpfs[i]=dpfs[i-1]==0?0:dpfs[i-1]+1;//到之前的负数数组长度不为0,到此处长度才能+1 max=Math.max(max,dpzs[i]); }else if(nums[i]<0){ dpzs[i]=dpfs[i-1]==0?0:dpfs[i-1]+1; dpfs[i]=dpzs[i-1]+1; max=Math.max(max,dpzs[i]); } } // for (int i = 0; i < n; i++) { // System.out.print("dpzs--"+dpzs[i]); // System.out.println(" dpfs--"+dpfs[i]); // } System.out.println(max); } }