当前位置:网站首页>Leetcode notes - dynamic planning -day6
Leetcode notes - dynamic planning -day6
2022-07-06 15:16:00 【LL. LEBRON】
List of articles
LeetCode Brush notes - Dynamic programming -day6
152. Product maximum subarray
1. subject
Original link :152. Product maximum subarray

2. Their thinking
Algorithm : Dynamic programming + Rolling array optimization
- f[i] All from 0 To i And choose a[i] The maximum product obtained
- g[i] All from 0 To i And choose a[i] Minimum product obtained
There are several situations :
- When a[i] >= 0 when ,f[i] = max(a[i], f[i - 1] * a[i])
- When a[i] < 0 when ,f[i] = max(a[i], g[i - 1] * a[i])
- When a[i] >= 0 when ,g[i] = min(a[i], g[i - 1] * a[i])
- When a[i] < 0 when ,g[i] = min(a[i], f[i - 1] * a[i])
Can be combined into :
- When
a[i] >= 0whenf[i] = max(a[i], max(f[i-1] * a[i],g[i-1]*a[i])) - When
a[i]<0whenf[i] = max(a[i], max(g[i-1] * a[i],f[i-1]*a[i])
You can use scrolling arrays to optimize space . See the code for details .
3. Code
class Solution {
public:
int maxProduct(vector<int>& a) {
int f=a[0],g=a[0];
int res=a[0];
for(int i=1;i<a.size();i++){
int t=a[i],fa=f*t,ga=g*t;
f=max(t,max(fa,ga));
g=min(t,min(fa,ga));
res=max(res,f);
}
return res;
}
};
1567. The longest subarray length whose product is a positive number
1. subject
Original link :1567. The longest subarray length whose product is a positive number

2. Their thinking
Algorithm : Dynamic programming
We can use two arrays f[i] and g[i]:
f[i]Denotes the following i The length of the longest subarray with a positive product at the endg[i]Denotes the following i The length of the longest subarray with a negative product at the end
Here we can get the recurrence formula :
- If the current number is greater than 0, namely
nums[i]>0, Multiply the previous product by the current number , The positive and negative will not change , therefore :f[i]=f[i-1]+1- If
g[i-1]It's not equal to 0 Words , One more , If g[i-1] As such 0, A positive number here will not change
- If the current number is less than 0, namely
nums[i]<0, Multiplying the previous product by the current number will change the positive and negative of the product , therefore :- Now
g[i]It should be equal tof[i-1]+1, becausef[i-1]The product of contained numbers is a positive number , Multiplying by the current number is just a negative number . f[i]You need to considerg[i-1]situation , Ifg[i-1]by 0, heref[i]Also for 0, otherwisef[i]=g[i-1]+1, A negative number multiplied by a negative number is a positive number
- Now
- If the current number is 0, namely
nums[i]==0, takef[i],g[i]The assignment is 0 - Maintain the maximum value for each iteration :
res=max(res,f[i]);
3. Code
class Solution {
public:
int getMaxLen(vector<int>& nums) {
int f=0,g=0;
if(nums[0]>0) f=1;
else if(nums[0]<0) g=1;
int res=f;
for(int i=1;i<nums.size();i++){
if(nums[i]>0){
f++;
g=(g==0)?0:g+1;
}else if(nums[i]<0){
int t=f;
f=(g==0)?0:g+1;
g=t+1;
}else{
f=0,g=0;
}
res=max(res,f);
}
return res;
}
};

边栏推荐
- Public key box
- 安全测试入门介绍
- Investment should be calm
- Collection collection and map collection
- 软件测试面试回答技巧
- Statistics 8th Edition Jia Junping Chapter 4 Summary and after class exercise answers
- UCORE lab7 synchronous mutual exclusion experiment report
- [issue 18] share a Netease go experience
- Leetcode simple question: check whether two strings are almost equal
- Cadence physical library lef file syntax learning [continuous update]
猜你喜欢

ucore lab6 调度器 实验报告

MySQL数据库(四)事务和函数

The maximum number of words in the sentence of leetcode simple question

China's county life record: go upstairs to the Internet, go downstairs' code the Great Wall '
软件测试面试要问的性能测试术语你知道吗?

软件测试Bug报告怎么写?

Sleep quality today 81 points

Stc-b learning board buzzer plays music 2.0

Description of Vos storage space, bandwidth occupation and PPS requirements

ucore lab2 物理内存管理 实验报告
随机推荐
Nest and merge new videos, and preset new video titles
ByteDance ten years of experience, old bird, took more than half a year to sort out the software test interview questions
线程及线程池
自动化测试中敏捷测试怎么做?
What level do 18K test engineers want? Take a look at the interview experience of a 26 year old test engineer
基于485总线的评分系统双机实验报告
Statistics 8th Edition Jia Junping Chapter 2 after class exercises and answer summary
Stc-b learning board buzzer plays music 2.0
软件测试有哪些常用的SQL语句?
Knowledge that you need to know when changing to software testing
Install and run tensorflow object detection API video object recognition system of Google open source
Differences between select, poll and epoll in i/o multiplexing
Pedestrian re identification (Reid) - data set description market-1501
自动化测试你必须要弄懂的问题,精品总结
150 common interview questions for software testing in large factories. Serious thinking is very valuable for your interview
Don't you even look at such a detailed and comprehensive written software test question?
Sorting odd and even subscripts respectively for leetcode simple problem
接口测试面试题及参考答案,轻松拿捏面试官
The number of reversing twice in leetcode simple question
[HCIA continuous update] advanced features of routing