力扣1567-乘积为正数的最长子数组长度

        这道题还是有点绕,尤其是当nums[i]<0时的处理逻辑,需要特别注意,因为这里需要涉及一个将counte2的值赋给counte1。

package likou;
/*
 * 乘积为正数的最长子数组长度
 * 题干:
 * 	给你一个整数数组nums,请你求出乘积为正数的最长子数组的长度
 * 	一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组
 * 	请你返回乘积为正数的最长子数组长度
 */
public class Demo1567 {
	/*
	 * 解题思路:
	 * 	要求的时乘积为正数的最长子数组的长度,则要求数组尽可能的长
	 *  结果为整数,则可能遍历到i元素时,i可能为正也可能为负
	 *  因此需要记录遍历到i-1个元素时,不管积时正数还是负数都要记录最大长度
	 */
	public int getMaxLen(int[] nums) {
          int count1 = nums[0]>0?1:0;//积为整数最大长度
          int count2 = nums[0]<0?1:0;//积为负数最大长度
          int value = count1;//最大长度
          int length = nums.length;
          for(int i=1;i<length;i++) {
        	  int temp = nums[i];
        	//1,2,-2,6,-3,0,4
        	  if(temp > 0) {
        		  count1++;
        		  if(count2 > 0) {
        			  count2++;
        		  }
        	  }else if(temp<0) {
        		  int newCount1 = count2>0?count2+1:0;
        		  int newCount2 = count1+1;
        		  count1 = newCount1;
        		  count2 = newCount2;
        	  }else {
        		  count1 = 0;
        		  count2 = 0;
        	  }
        	  value = Math.max(value, count1);
          }
          return value;
    }
	
	public static void main(String args[]) {
		Demo1567 demo = new Demo1567();
		int[] nums = {1,2,3,5,-6,4,0,10};
		System.out.println(demo.getMaxLen(nums));
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunny_daily

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值