题解 | #乘积为正数的最长连续子数组#

乘积为正数的最长连续子数组

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 n = Integer.valueOf(in.nextLine());
        int[] nums = new int[n];
        for(int i = 0; i < n;i++){
            nums[i] = in.nextInt();
        }
        int[][] dp = new int[n][2];
        // 连续正数的数量
        dp[0][0] = nums[0] > 0 ? 1:0;
        // 连续负数的数量
        dp[0][1] = nums[0] < 0 ? 1:0;
        for(int i = 1; i < n; i++){
		  //当此时数值>0时,正数由i-1的正数得出-->dp[i-1][0] == 0,则dp[i][0] = 1否则为dp[i-1][0]+1
		  // 负数由i-1的负数得出--> dp[i-1][1] == 0,则前面没有负数,这个数又是正数,所以dp[i][1] = 0,否则为dp[i-1][1]+1
            if(nums[i] > 0){
                dp[i][0] = dp[i-1][0] == 0? 1:dp[i-1][0]+1;
                dp[i][1] = dp[i-1][1] == 0? 0:dp[i-1][1]+1;
            }else if(nums[i] < 0){ // 同理
                dp[i][0] = dp[i-1][1] == 0? 0:dp[i-1][1]+1;
                dp[i][1] = dp[i-1][0] == 0? 1:dp[i-1][0]+1;
            }else{
			  // 注意此时都为0
                dp[i][0] = 0;
                dp[i][1] = 0;
            }
        }
        int res = 0;
        for(int i = 0; i < n; i++){
            res = res > dp[i][0] ? res : dp[i][0];

        }
        System.out.println(res);
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
05-13 14:16
战争学院:你妈妈第一反应是骗子,我妈妈第一反应是培训贷,全国家长系统是统一的吗哈哈哈
点赞 评论 收藏
分享
小牛炒肉:好大的官威居然不是什么官
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务