力扣刷题记录(22)LeetCode:714、300、674
2023-12-30 15:29:22
714.?买卖股票的最佳时机含手续费
直接分析状态:
1.持有股票
- ?可以是持续上一次持有股票的状态
- 可以是买入当前股票
2.不持有股票
- 可以是持续上一次不持有股票的状态
- 可以是卖出当前股票?
class Solution {
public:
int maxProfit(vector<int>& prices, int fee) {
vector<vector<int>> dp(prices.size(),vector<int>(2,0));
dp[0][0]=-prices[0];
for(int i=1;i<prices.size();i++)
{
dp[i][0]=max(dp[i-1][0],dp[i-1][1]-prices[i]);
dp[i][1]=max(dp[i-1][1],dp[i-1][0]+prices[i]-fee);
}
return max(dp[dp.size()-1][0],dp[dp.size()-1][1]);
}
};
300.?最长递增子序列?
?dp表示当前区间内最长递增子序列的长度,在满足当前nums值大于区间内某一nums值的前提下,寻找当前区间内最长递增子序列的长度。dp[i]=max(dp[i],dp[j]+1)
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
vector<int> dp(nums.size(),1);
int ans=1;
for(int i=1;i<nums.size();i++)
{
for(int j=0;j<i;j++)
{
if(nums[i]>nums[j])
dp[i]=max(dp[i],dp[j]+1);
}
ans=max(ans,dp[i]);
}
return ans;
}
};
674.?最长连续递增序列
声明数组dp,表示当前区间最长连续递增序列的长度。如果当前nums值大于前一个nums值,那么当前区间?最长连续递增序列的长度就等于前一个的长度加1
class Solution {
public:
int findLengthOfLCIS(vector<int>& nums) {
vector<int> dp(nums.size(),1);
int ans=1;
for(int i=1;i<nums.size();i++)
{
if(nums[i]>nums[i-1])
dp[i]=dp[i-1]+1;
ans=max(ans,dp[i]);
}
return ans;
}
};
文章来源:https://blog.csdn.net/weixin_61759589/article/details/135304716
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!