当前位置:网站首页>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;
}
};

边栏推荐
- Sorting odd and even subscripts respectively for leetcode simple problem
- Global and Chinese markets of Iam security services 2022-2028: Research Report on technology, participants, trends, market size and share
- Introduction to variable parameters
- CSAPP家庭作業答案7 8 9章
- 全网最详细的postman接口测试教程,一篇文章满足你
- A method and implementation of using VSTO to prohibit excel cell editing
- If the position is absolute, touchablehighlight cannot be clicked - touchablehighlight not clickable if position absolute
- Emqtt distribution cluster and node bridge construction
- Stc-b learning board buzzer plays music 2.0
- MySQL数据库(五)视 图 、 存 储 过 程 和 触 发 器
猜你喜欢

Practical cases, hand-in-hand teaching you to build e-commerce user portraits | with code

How to become a good software tester? A secret that most people don't know
Knowledge that you need to know when changing to software testing

HackTheBox-Emdee five for life
What are the software testing methods? Show you something different

Interface test interview questions and reference answers, easy to grasp the interviewer

線程及線程池

Investment operation steps
软件测试方法有哪些?带你看点不一样的东西

The most detailed postman interface test tutorial in the whole network. An article meets your needs
随机推荐
Common Oracle commands
遇到程序员不修改bug时怎么办?我教你
安全测试入门介绍
UCORE lab8 file system experiment report
What is "test paper test" in software testing requirements analysis
How to use Moment. JS to check whether the current time is between 2 times
[oiclass] share prizes
Knowledge that you need to know when changing to software testing
Zhejiang University Edition "C language programming experiment and exercise guide (3rd Edition)" topic set
ByteDance ten years of experience, old bird, took more than half a year to sort out the software test interview questions
Maximum nesting depth of parentheses in leetcode simple questions
[oiclass] maximum formula
UCORE lab1 system software startup process experimental report
STC-B学习板蜂鸣器播放音乐2.0
What are the software testing methods? Show you something different
Dlib detects blink times based on video stream
Global and Chinese market of portable and handheld TVs 2022-2028: Research Report on technology, participants, trends, market size and share
如何成为一个好的软件测试员?绝大多数人都不知道的秘密
Should wildcard import be avoided- Should wildcard import be avoided?
Global and Chinese markets of cobalt 2022-2028: Research Report on technology, participants, trends, market size and share