当前位置: 首页 > news >正文

【算法题】1567. 乘积为正数的最长子数组长度

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
坚持不懈,越努力越幸运,大家一起学习鸭~~~

题目:

给你一个整数数组 nums ,请你求出乘积为正数的最长子数组的长度。

一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。

请你返回乘积为正数的最长子数组长度。

示例 1:

输入:nums = [1,-2,-3,4]
输出:4
解释:数组本身乘积就是正数,值为 24 。
示例 2:

输入:nums = [0,1,-2,-3,-4]
输出:3
解释:最长乘积为正数的子数组为 [1,-2,-3] ,乘积为 6 。
注意,我们不能把 0 也包括到子数组中,因为这样乘积为 0 ,不是正数。
示例 3:

输入:nums = [-1,-2,-3,0,1]
输出:2
解释:乘积为正数的最长子数组是 [-1,-2] 或者 [-2,-3] 。

提示:

1 <= nums.length <= 10^5
-10^9 <= nums[i] <= 10^9

java代码:

class Solution {
    public int getMaxLen(int[] nums) {
        int length = nums.length;
        int[] positive = new int[length];
        int[] negative = new int[length];
        if (nums[0] > 0) {
            positive[0] = 1;
        } else if (nums[0] < 0) {
            negative[0] = 1;
        }
        int maxLength = positive[0];
        for (int i = 1; i < length; i++) {
            if (nums[i] > 0) {
                positive[i] = positive[i - 1] + 1;
                negative[i] = negative[i - 1] > 0 ? negative[i - 1] + 1 : 0;
            } else if (nums[i] < 0) {
                positive[i] = negative[i - 1] > 0 ? negative[i - 1] + 1 : 0;
                negative[i] = positive[i - 1] + 1;
            } else {
                positive[i] = 0;
                negative[i] = 0;
            }
            maxLength = Math.max(maxLength, positive[i]);
        }
        return maxLength;
    }
}

相关文章:

  • 北京网站设计提供商/电商热门关键词
  • 网站做推广/黄页引流推广
  • 杭州做网站找力果/肥城市区seo关键词排名
  • 海南百度首页广告/保定seo排名
  • 思明区建设局官网站/互联网哪个行业前景好
  • 查看虚拟币行情的网站怎么做/百度收录方法
  • 如何摆脱原生家庭的影响
  • Typescript【类(class) 2、面向对象的特点 3、接口(Interface) 4、泛型(Generic)】
  • 【计算机体系结构】指令集体系结构、微体系结构简介
  • Linux 重置网卡流量统计
  • php sql注入
  • 向上沟通:你必须要注意的三个误区
  • 【设计模式】创建型模式·原型模式
  • 2023.1. Stimulsoft 报告和仪表板的新版本:Crack
  • Java中的包装类
  • ITIL 问题管理综合指南
  • 广告业务系统 之 业务串联 —— “ PDB - 广告投放【保量保价】”
  • 【初阶数据结构】——写了将近 5 万字,终于把 二叉树 初阶的内容讲清楚了