当前位置:网站首页>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] >= 0
whenf[i] = max(a[i], max(f[i-1] * a[i],g[i-1]*a[i]))
- When
a[i]<0
whenf[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;
}
};
边栏推荐
- Zhejiang University Edition "C language programming experiment and exercise guide (3rd Edition)" topic set
- How to write the bug report of software test?
- Servlet
- Global and Chinese market of barrier thin film flexible electronics 2022-2028: Research Report on technology, participants, trends, market size and share
- 软件测试工作太忙没时间学习怎么办?
- 线程及线程池
- Leetcode simple question: check whether two strings are almost equal
- Portapack application development tutorial (XVII) nRF24L01 launch B
- HackTheBox-Emdee five for life
- ucore lab7 同步互斥 实验报告
猜你喜欢
Brief description of compiler optimization level
What to do when programmers don't modify bugs? I teach you
Daily code 300 lines learning notes day 9
CSAPP homework answers chapter 789
Stc-b learning board buzzer plays music 2.0
STC-B学习板蜂鸣器播放音乐
Servlet
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
What level do 18K test engineers want? Take a look at the interview experience of a 26 year old test engineer
随机推荐
What are the business processes and differences of the three basic business modes of Vos: direct dial, callback and semi direct dial?
ucore lab6 调度器 实验报告
Opencv recognition of face in image
About the garbled code problem of superstar script
C language do while loop classic Level 2 questions
How to become a good software tester? A secret that most people don't know
自动化测试你必须要弄懂的问题,精品总结
What are the software testing methods? Show you something different
Don't you even look at such a detailed and comprehensive written software test question?
150 common interview questions for software testing in large factories. Serious thinking is very valuable for your interview
China's county life record: go upstairs to the Internet, go downstairs' code the Great Wall '
CSAPP Shell Lab 实验报告
MySQL数据库(四)事务和函数
线程及线程池
MySQL development - advanced query - take a good look at how it suits you
Sleep quality today 81 points
Report on the double computer experiment of scoring system based on 485 bus
Install and run tensorflow object detection API video object recognition system of Google open source
Currently, mysql5.6 is used. Which version would you like to upgrade to?
Want to learn how to get started and learn software testing? I'll give you a good chat today