做网站一般把宽度做多少,沙井品牌网站建设,网站域名ip查询,石碣做网站1567. 乘积为正数的最长子数组长度
已解答
中等 给你一个整数数组 nums #xff0c;请你求出乘积为正数的最长子数组的长度。
一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。
请你返回乘积为正数的最长子数组长度。 本题要求乘积为正数#xff0c;而整…1567. 乘积为正数的最长子数组长度
已解答
中等 给你一个整数数组 nums 请你求出乘积为正数的最长子数组的长度。
一个数组的子数组是由原数组中零个或者更多个连续数字组成的数组。
请你返回乘积为正数的最长子数组长度。 本题要求乘积为正数而整数数组中存在正数和负数两种因此需要分别用两个数组保存一个用于保存前面是正数的最大长度名字为pos一个用来保存前面是负数的最大长度名字是negpos在面对第i个数字为正负的情况时若第i个是正则pos[i]pos[i-1]1negpos[i]negpos[i-1]1. 第i个是负数则pos[i]negpos[i-1]1negpos[i]pos[i-1]1.
递归求解即可
class Solution {
public:int getMaxLen(vectorint nums) {int nnums.size();vectorintpos(n1,0);vectorintnegtive(n1,0);int j0;int sum0;for(int i0;in;i){int numnums[i];if(num0){pos[i1]pos[i]1;if(negtive[i]!0)negtive[i1]negtive[i]1;}else if(num0){negtive[i1]pos[i]1;if(negtive[i]!0)pos[i1]negtive[i]1;}else{pos[i1]negtive[i1]0; }}int retpos[0];for(int i1;in;i){if(pos[i]ret){retpos[i];}}return ret;}};