zoukankan      html  css  js  c++  java
  • LeedCode刷题:1567.乘积为正数的最长子数组的长度

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

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

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

    动态规划求解,根据当前元素来填正负dp表的状态

     1 class Solution {
     2 public:
     3 /* 初始化 pos[0] 和 neg[0]
     4 1.遍历数组,若当前元素为正,那么:
     5   pos[i] 为 pos[i-1] + 1,
     6   如果 neg[i-1] > 0,即:以 nums[i-1] 结尾,乘积为负的数组存在,那么 neg[i] 为 neg[i-1] + 1;否则,neg[i] 为 0(因为当前元素也为正,没有乘积为负的数组)
     7 2.若当前元素为负,那么:
     8   如果 neg[i-1] > 0,那么 pos[i] 为 neg[i-1] + 1,否则,pos[i] 为 0
     9   neg[i] 为 pos[i-1] + 1
    10   更新乘积为正数的数组最大长度 ans */
    11     int getMaxLen(vector<int>& nums) {
    12         vector<int> dpPos(nums.size()+1,0);
    13         vector<int> dpNeg(nums.size()+1,0);
    14         int res=0;
    15         for(int i=1;i<dpPos.size();i++){
    16             if(nums[i-1]>0){
    17                 dpPos[i]=dpPos[i-1]+1;
    18                 dpNeg[i]=dpNeg[i-1]>0?dpNeg[i-1]+1:0;//因为 nums[i] 自己没法成为一个乘积为负的数组。
    19             }
    20             else if(nums[i-1]<0){
    21                 dpPos[i]=dpNeg[i-1]>0?dpNeg[i-1]+1:0;//因为 nums[i] 自己没法成为一个乘积为正的数组。
    22                 dpNeg[i]=dpPos[i-1]+1;
    23             }
    24             else{
    25                 dpPos[i]=0;
    26                 dpNeg[i]=0;
    27             }
    28             res=max(dpPos[i],res);
    29         }
    30         return res;
    31     }
    32 };
  • 相关阅读:
    用PHP对数据库数据进行删除
    用PHP向数据库中添加数据
    PHP中如何连接数据库基本语句
    数组的函数(方法)
    PHP数组的定义和遍历
    正则表达式
    HTML
    函数
    二维数组
    字符串类型||日期时间类型||数学运算
  • 原文地址:https://www.cnblogs.com/nilbook/p/13593993.html
Copyright © 2011-2022 走看看