题解 | #乘积为整数的最长连续子数组#
乘积为整数的最长连续子数组
http://www.nowcoder.com/practice/0112b9b5a09048d89309f55ea666db91
动态规划,同时维护最长连续正数和最长连续负数
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); } }