题解 | #乘积为正数的最长连续子数组#
乘积为正数的最长连续子数组
https://www.nowcoder.com/practice/0112b9b5a09048d89309f55ea666db91
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 int i = in.nextInt(); long []a = new long[i]; while (in.hasNextLong() && i > 0) { // 注意 while 处理多个 case a[a.length - i--] = in.nextLong(); } System.out.print(dp(a)); } public static long dp(long a[]) { long []pos = new long[a.length]; long []neg = new long[a.length]; if( a[0] > 0){ pos[0] = 1; neg[0] = 0; }else{ pos[0] = 0; neg[0] = 1; } for (int i = 1; i < a.length ; i ++) { if(a[i] > 0){ pos[i] = pos[i-1] + 1; neg[i] = neg[i-1] > 0 ? neg[i-1] + 1 : 0; }else if(a[i] < 0){ pos[i] = neg[i-1] > 0 ? neg[i-1] + 1 : 0; neg[i] = pos[i-1] + 1; }else{ pos[i] = 0; neg[i] = 0; } } long res = Integer.MIN_VALUE; for (int i = 0 ; i < pos.length ; i ++) { if(pos[i] > res) res = pos[i]; } return res; } }