5500 乘積為正數的最長子陣列長度

2021-10-24 02:12:02 字數 1230 閱讀 4850

給你乙個整數陣列 nums ,請你求出乘積為正數的最長子陣列的長度。

乙個陣列的子陣列是由原陣列中零個或者更多個連續數字組成的陣列。

請你返回乘積為正數的最長子陣列長度。

示例  1:

輸入:nums = [1,-2,-3,4]

輸出:4

解釋:陣列本身乘積就是正數,值為 24 。

1.維護以前一位置結尾的正數和負數的長度,當此刻nums[i]>0,這個位置的正數長度=負數長度=前一時刻的相應長度+1,當nums[i]<0時,交換位置再+1,遇到0的時候重置

2,dp,2個狀態變數的一維dp,思路同1

class solution:

def getmaxlen(self, nums: list[int]) -> int:

res=pos=0

neg=-9999999999

for num in nums:

if num==0:

pos=0

neg=-9999999999

elif num>0:

pos+=1

neg+=1

else:

pos, neg = max(neg + 1, 0), pos + 1

res=max(res,pos)

return res

class solution:

def getmaxlen(self, nums: list[int]) -> int:

n=len(nums)

dp_neg=[0 for _ in range(n+1)]

dp_pos=[0 for _ in range(n+1)]

res=0

for i in range(1,n+1):

if nums[i-1]==0:

dp_neg[i]=dp_pos[i]=0

elif nums[i-1]>0:

dp_pos[i]=dp_pos[i-1]+1

dp_neg[i]= dp_neg[i-1]+1 if dp_neg[i-1]>0 else 0

else:

dp_neg[i]=dp_pos[i-1]+1

dp_pos[i]=dp_neg[i-1]+1 if dp_neg[i-1]>0 else 0

res=max(res,dp_pos[i])

return res

1567 乘積為正數的最長子陣列長度 dp

給你乙個整數陣列 nums 請你求出乘積為正數的最長子陣列的長度。乙個陣列的子陣列是由原陣列中零個或者更多個連續數字組成的陣列。請你返回乘積為正數的最長子陣列長度。示例 1 輸入 nums 1,2,3,4 輸出 4 解釋 陣列本身乘積就是正數,值為 24 思路 遞迴,dp i 0 乘積為負的最長子陣...

未排序正數陣列中累加和為給定值的最長子陣列的長度

未排序正數陣列中累加和為給定值的最長子陣列的長度 給定乙個陣列arr,該陣列無序,但每個值均為正數,再給定乙個正數k。求arr的所有子陣列中所有元素相加和為k的最長子陣列的長度 例如,arr 1,2,1,1,1 k 3 累加和為3的最長子陣列為 1,1,1 所以結果返回3 要求 時間複雜度為o n ...

累加和為aim的最長子陣列

參考 擴充套件1乙個陣列中要麼是奇數,要麼是偶數,求奇數和偶數相等的最長子陣列。思路用1表示奇數,用 1表示偶數,那麼就是求累加和為0的最長子陣列,參考上面 擴充套件2求乙個陣列怎樣劃分可以使得子陣列異或為0的個數最多。思路動態規劃 定義乙個dp陣列,dp i 表示以 i 結尾可以劃分的最多個數 對...