首页 > 试题广场 >

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

[编程题]乘积为正数的最长连续子数组
  • 热度指数:495 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为 n 的整数数组,请你找出其中最长的乘积为正数的子数组长度。
子数组的定义是原数组中一定长度的连续数字组成的数组。

数据范围: , 数组中的元素满足
示例1

输入

[1,2,3,-1,4]

输出

3
示例2

输入

[1,2,3,0,4]

输出

3
package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @return int整型
*/
func findLongestSubArray( nums []int ) int {
    ans:=0
    var pre1,pre2,tmp int
    for _,x:=range nums{
        if x>0{
            pre1++
            if pre2!=0{
                pre2++
            }
        }else if x==0{
            pre1=0
            pre2=0
        }else{
            tmp=pre1
            if pre2==0{
                pre1=0
            }else{
                pre1=pre2+1
            }
            if tmp==0{
                pre2=1
            }else{
                pre2=tmp+1
            }
        }
        if pre1>ans{
            ans=pre1
        }
    }
    return ans
}

发表于 2023-03-15 16:27:10 回复(0)