思路一:

设DP0[i]为以下标为i结尾的乘积为正数的最长子序列元素个数,DP1[i]为以下标为i结尾的乘积为负数的最长子序列元素个数,DP0[i]的值与nums[i]的正负号以及DP0[i-1]和DP[i-1]有关系,DP1[i]的值与nums[i]的正负号以及DP0[i-1]和DP[i-1]有关系。

1.当nums[i]>0时,且满足1<=i<nums.length

DP0[i]={DP1[i−1]+1DP0[i]=\begin{cases} DP1[i-1]+1\\ \end{cases} DP0[i]={DP1[i−1]+1​
DP1[i]={DP1[i−1]+1,DP1[i−1]>00,DP1[i−1]==0DP1[i]=\begin{cases} DP1[i-1]+1,DP1[i-1]>0\\ 0,DP1[i-1]==0\\ \end{cases} DP1[i]={DP1[i−1]+1,DP1[i−1]>00,DP1[i−1]==0​
2.当nums[i]<0时,且满足1<=i<nums.length

DP1[i]={DP0[i−1]+1DP1[i]=\begin{cases} DP0[i-1]+1\\ \end{cases} DP1[i]={DP0[i−1]+1​
DP0[i]={DP0[i−1]+1,DP0[i−1]>00,DP0[i−1]==0DP0[i]=\begin{cases} DP0[i-1]+1,DP0[i-1]>0\\ 0,DP0[i-1]==0\\ \end{cases} DP0[i]={DP0[i−1]+1,DP0[i−1]>00,DP0[i−1]==0​

3.当nums[i]==0,则DP0[i]和DP1[i]均取0

具体实现

可以进一步采取状态压缩的方式,只保留DP0[i-1]和DP1[i-1],根据其不断更新DP0[i]和DP1[i],在遍历过程记录最优值ans即可

代码

class Solution {public:int getMaxLen(vector<int>& nums) {int ans=0;int ZMax=0;int FMax=0;int length=nums.size();for(int i=0;i<length;i++){int t1;int t2;if(nums[i]==0){t1=0;t2=0;}else if(nums[i]<0){t1=FMax>0?FMax+1:0;t2=ZMax+1;}else{t1=ZMax+1;t2=FMax>0?FMax+1:0;}ZMax=t1;FMax=t2;ans=ans>ZMax?ans:ZMax;}return ans;}
};

leetcode 1567相关推荐

  1. 动态规划——乘积为正数的最长子数组长度(Leetcode 1567)

    题目选自Leetcode 1567. 乘积为正数的最长子数组长度 题目描述: 解题思路: 解题代码: class Solution { public:int getMaxLen(vector<i ...

  2. leetcode 1567 替换所有问号

    leetcode 1567 替换所有问号 好久没写了 刷题 好久没写了 比较忙 比较懒 好久没上过了 看到有好久之前的提问啥的真是抱歉了. 刷题 最近重新看了下力扣 好不容易写了一个100% 贴出来纪 ...

  3. LeetCode 1567. 乘积为正数的最长子数组长度

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums ,请你求出乘积为正数的最长子数组的长度. 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组. 请你返回乘积为正数的 ...

  4. leetcode 1567. 乘积为正数的最长子数组长度python

    题目描述: 题解: 动态规划 1.维护两个数组: dppos[i]表示以nums[i]结尾的积为正数的子数组长度,dpneg[i]表示以nums[i]结尾的积为负数的子数组长度,初始化为全0,如果nu ...

  5. Java算法:LeetCode算法Java版合集1111-1588题

    1111. 有效括号的嵌套深度 题目描述 有效括号字符串 仅由 "(" 和 ")" 构成,并符合下述几个条件之一: 空字符串 连接,可以记作 AB(A 与 B ...

  6. [LeetCode]135.Candy

    [题目] There are N children standing in a line. Each child is assigned a rating value. You are giving ...

  7. 【LeetCode】(55)Jump Game(Medium)

    题目 Jump Game Total Accepted: 52275 Total Submissions: 194395My Submissions Question  Solution  Given ...

  8. LeetCode.接雨水

    题外话:LeetCode上一个测试用例总是通不过(我在文章末贴出通不过的测试用例),给的原因是超出运行时间,我拿那个测试用例试了下2.037ms运行完.我自己强行给加了这句: if(second == ...

  9. 【LeetCode】动态规划入门(专项打卡21天合集)

    [LeetCode]动态规划入门(专项打卡21天合集) 下图为证 文章目录 [LeetCode]动态规划入门(专项打卡21天合集) Day1 斐波拉契数 第 N 个泰波那契数 Day2 爬楼梯 使用最 ...

最新文章

  1. IOS 学习---触摸事件与手势
  2. c语言申请字符串动态,【分享】C语言动态长度字符串
  3. Python2和python3字符编码的区别
  4. {%csrf_token%}的作用
  5. oracle 如何形成死锁,ORACLE死锁
  6. oracle指定源位置怎么弄,ORACLE Goldengate测试解决源端和目标端表结构字段位置不同的2种实现方法...
  7. 第三十八期:用Git帮助写作者更好地完成工作
  8. LeetCode 1056. 易混淆数(哈希)
  9. python小测试1答案_测试1:Python 基本语法(选择题
  10. 关于C++标准库中的数据抽象
  11. ie11rtm版升级到最新_解决将Office 2010 Beta升级到RTM(最终版)的问题
  12. Dalamud:FFXIV插件框架和API-源码
  13. 几种反函数和差角公式的推导
  14. juniper认证(JNCIA,JNCIS,JNCIP,JNCIE)介绍
  15. 我的第一个HTML5游戏——打地鼠总结及源码
  16. 用null_blk工具来实现模拟分区块设备
  17. CF1296E1——String Coloring (easy version)
  18. CorelDRAW图片导出变色,如何解决?
  19. C语言基础-判断质数(素数)
  20. 基于ZigBee的智能监控系统-上位机代码

热门文章

  1. 用uniapp实现微信小程序的电子签名效果
  2. 【面经——虎牙实习+一面+HR面+offer】
  3. java不完全教程附编码示例
  4. 浩方cs全是虚拟服务器,在浩方里面的CS1.5 如何建立服务器
  5. 沈航数值-17-18年A-有答案
  6. 莫比乌斯反演小结 + 黑暗爆炸 2301
  7. 星光大道视频播放器精品版
  8. Android应用商店的软件安全性到底如何?
  9. android 跳转oppo应用中心_Android 遍历手机应用,跳转应用市场详情页面
  10. [统计]_怎样用数据炒菜:统计建模的两种文化