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

题目

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

解法

解法一

算是贪心吧?
遍历的方向从前往后也是一样的道理,只不过当时写代码的时候从后往前想的,就这么写了

class Solution {
/**
* @param Integer[] $nums
* @return Integer
*/
function getMaxLen($nums) {
$len = count($nums);
if ($len == 1) {
return $nums[0] > 0 ? 1 : 0;
}
$lastZeroIndex = $len;
$lastZeroMinusCnt = 0;
$lastMinusIndex = -1;
$maxDis = 0;
for ($i = $len - 1; $i >= 0; $i--) {
if ($nums[$i] == 0) {
$lastZeroIndex = $i;
$lastZeroMinusCnt = 0;
$lastMinusIndex = -1;
continue;
}
if ($nums[$i] < 0) {
// 距离上一个0或者尾部的负数数量
$lastZeroMinusCnt++;
if ($lastMinusIndex == -1) {
// 从0或者尾部过来的第一个负数位置
$lastMinusIndex = $i;
}
}
if ($lastZeroMinusCnt % 2 == 0) {
// 负数个数为偶数,可以到结尾或者0的位置
$maxDis = max($maxDis, $lastZeroIndex - $i);
} else {
// 负数个数为奇数,只能到最后一个负数之前的位置
$maxDis = max($maxDis, $lastMinusIndex - $i);
}
}
return $maxDis;
}
}

dp

大概思想是:
维护两个节点,一个是带负数的长度,一个是不带负数的长度

参考

官方题解

posted @   吴丹阳-V  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示