1.簡述:
描述
給定一個長度為 n 的整數數組,請你找出其中最長的乘積為正數的子數組長度。
子數組的定義是原數組中一定長度的連續數字組成的數組。
資料範圍: , 數組中的元素滿足
輸入描述:
第一行輸入一個正整數 n ,表示數組長度。
第二行輸入 n 個整數,表示數組中的元素。
輸出描述:
輸出最長的乘積為正數的子數組長度
示例1
輸入:
5
1 2 3 -5 1
輸出:
3
示例2
輸入:
5
1 2 3 0 5
3
import java.util.*;
public class Main{
public static void main(String []args){
Scanner input=new Scanner(System.in);
int n=input.nextInt();
int []num=new int[n];
for(int i=0;i<n;i++){
num[i]=input.nextInt();
}
int [][]dp=new int[n+1][2];
int max=0;
dp[0][0]=0;
dp[0][1]=0;
for(int i=1;i<=n;i++){
int val=num[i-1];
if(val>0){
dp[i][0]=dp[i-1][0]+1;
if(dp[i-1][1]==0){
dp[i][1]=0;
}
else{
dp[i][1]=dp[i-1][1]+1;
}
}
else if(val<0){ //交叉更新
dp[i][1]=dp[i-1][0]+1;
if(dp[i-1][1]==0){
dp[i][0]=0;
}
else{
dp[i][0]=dp[i-1][1]+1;
}
}
}
for(int i=1;i<=n;i++){
max=Math.max(max,dp[i][0]);
}
System.out.println(max);
}
}