leetcode 1567. 乘积为正数的最长子数组长度python
题目描述:
题解:
动态规划
1.维护两个数组: dppos[i]表示以nums[i]结尾的积为正数的子数组长度,dpneg[i]表示以nums[i]结尾的积为负数的子数组长度,初始化为全0,如果nums[0]>0则dppos[0]=1,如果nums[i]<0则dpneg[0]=1
2.如果nums[i]>0,则dppos[i]=dppos[i-1]+1,对dpneg的处理比较特殊,如果dpneg[i-1]为0,那么dpneg[i]仍然应该为0.比如数组[0,1],0对应的dppos[0] dpneg[0]都为0,1对应的dppos[1]=1(对应子数组[1]),1对应的dpneg[1]应该仍为0.
3.如果nums[i]<0,那么dppos[i]应该为dpneg[i-1]+1(因为nums[i]必须乘以一个负数,积才为正数),如果dpneg[i-1]=0,则dppos[i]也为0。dpneg[i]=dppos[i-1]+1,此时不用判断dppos[i-1]是否为0,因为即使dppos[i-1]=0 dppos[i]也成立,对应子数组nums[i]。
总结:
如果nums[i]>0,在更新dpneg[i]的时候要判断,如果nums[i]<0,更新dppos[i]的时候要判断。
如果nums[i]<0,dppos[i]在dpneg[i-1]基础上,dpneg[i]在dppos[i-1]基础上更新。
class Solution:def getMaxLen(self, nums: List[int]) -> int:dppos = [0 for i in range(len(nums))]dpneg = [0 for i in range(len(nums))]if nums[0]>0:dppos[0] = 1if nums[0]<0:dpneg[0] = 1for i in range(1,len(nums)):if nums[i]>0:dppos[i] = dppos[i-1]+1if dpneg[i-1]>0:dpneg[i] = dpneg[i-1]+1else:dpneg[i] = 0elif nums[i]<0:if dpneg[i-1]>0:dppos[i] = dpneg[i-1]+1else:dppos[i]=0dpneg[i] = dppos[i-1]+1else:dppos[i] = 0dpneg[i] = 0result = max(dppos)return result
leetcode 1567. 乘积为正数的最长子数组长度python相关推荐
- LeetCode 1567. 乘积为正数的最长子数组长度
文章目录 1. 题目 2. 解题 1. 题目 给你一个整数数组 nums ,请你求出乘积为正数的最长子数组的长度. 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组. 请你返回乘积为正数的 ...
- 1567. 乘积为正数的最长子数组长度 ●●
1567. 乘积为正数的最长子数组长度 ●● 描述 给你一个整数数组 nums ,请你求出乘积为正数的最长子数组的长度. 一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组. 请你返回乘积为 ...
- 【LeetCode】LeetCode之乘积为正数的最长子数组长度——暴力枚举+动态规划+Kadane算法
- 动态规划——乘积为正数的最长子数组长度(Leetcode 1567)
题目选自Leetcode 1567. 乘积为正数的最长子数组长度 题目描述: 解题思路: 解题代码: class Solution { public:int getMaxLen(vector<i ...
- leetcode1567. 乘积为正数的最长子数组长度(Python3、c++)
文章目录 leetcode1567. 乘积为正数的最长子数组长度 方法:动态规划 思路: 代码: Python3: cpp: 结果: leetcode1567. 乘积为正数的最长子数组长度 给你一个整 ...
- LeetCode:输出整体轮廓线和最长子数组长度
LeetCode:描述轮廓线和最长子数组长度 目录: 输出整体轮廓线 返回最长子数组长度 求数组中奇数和偶数个数相同的最长子数组 1. 输出整体轮廓线 给定一个N行3列二维数组, 每一行表示有一座大楼 ...
- LeetCode 325. 和等于 k 的最长子数组长度(哈希表记录第一次出现的状态)
文章目录 1. 题目 2. 解题 1. 题目 给定一个数组 nums 和一个目标值 k,找到和等于 k 的最长子数组长度. 如果不存在任意一个符合要求的子数组,则返回 0. 注意: nums 数组的总 ...
- 左神算法:未排序正数数组中累加和为给定值的最长子数组长度(Java版)
本题来自左神<程序员代码面试指南>"未排序正数数组中累加和为给定值的最长子数组长度"题目. 题目 牛客OJ:未排序数组中累加和为给定值的最长子数组长度 题解 本文提供的 ...
- 未排序正整数组中累加和为指定值的最长子数组长度
题目:给定一个数组arr,该数组无序,但每个值都为正数,在给定一个正数k.求arr中所有的子数组中所有元素累加为k的最长子数组长度. 例如,arr = [1,2,1,1,1],k = 3. 累加和 ...
最新文章
- Linux系统没有home分区,我的linux系统home分区挂不上了
- Eclipse从github上clone项目到开发环境
- 张萍萍山东大学计算机科学系毕业生,并行驰骋,放“码”来战!看先导杯大奖赛上山大风采...
- 面试题 gety() getTop() TranslationY关系
- Java去除字符中的空格(trim)
- 面向接口编程(面向协议编程)
- html设置网页的大小怎么设置方法,网页字体大小怎么样去设置
- 保护眼睛的颜色和各种背景颜色设置方法(转)
- ​最强全集,数据科学领域,那些你不能不知道的大咖们!
- 电脑更换硬盘 | 怎么迁移数据到新硬盘?
- matlab实用小程序段 —— 串口发送和读取
- Python编程:从入门到实践pdf
- 跟sky学数字IC前端设计:数字IP_FPGA实战
- antd+react ---手机号校验(流程中使用)
- gatsby-config.js有什么作用?
- 关于社交电商系统的起源、发展历史和类型
- 自定义滚动条插件-iScroll
- python爬取智联招聘网
- “暗通道”到底是个什么东西
- uiautomator2 App自动化测试框架【一】
热门文章
- nodejs+Vue+Elementui的校园二手旧书交易交换平台sequelize
- 用JAVA awt实现Image Asset Studio生成圆形或圆角矩形图片功能
- 哈工程计算机专硕考研经验贴
- QT5 OpenGL (四, 绘制立体图形)
- win7已经阻止此发行者在您的计算机上运行软件,Win7系统提示Windows已经阻止此软件因为无法验证发行者解决方法...
- 提高数据中心机房管理效能浅析
- java代码借助插件生成组织架构图并实现导出功能
- 三位整数两位小数掩码_子网掩码转换32位整数
- 用java写个记账本,融会贯通你的J2SE(一)java实战项目 Java项目
- 河南专升本公共英语语法考点分析---动词时态