题解 | #乘积为正数的最长连续子数组#
乘积为正数的最长连续子数组
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);
}
}
查看1道真题和解析