天天看點

#yyds幹貨盤點# 動态規劃專題:乘積為正數的最長連續子數組

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);
    }
}