暴力+dp:买卖股票的最佳时机(代码片段)

zhenglijie zhenglijie     2023-04-08     672

关键词:

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。
注意:你不能在买入股票前卖出股票。
 
示例 1:
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
     注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

示例 2:
输入: [7,6,4,3,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为 0
 
暴力:时间复杂度O(N^2)
 1 int maxProfit(int* prices, int pricesSize)
 2 
 3     if (pricesSize == 0 || pricesSize == 1)
 4         return 0;
 5     int i, j;
 6     int sum = 0;
 7 
 8     for (i = 0; i < pricesSize-1; i++)
 9     
10         for (j = i + 1; j < pricesSize; j++)
11         
12             sum = (sum > (prices[j] - prices[i]) ? sum : (prices[j] - prices[i]));
13         
14     
15     
16     return sum;
17 

DP:时间复杂度O(N)

一遍遍历,边遍历边找最小值,边进行求最大,利润去掉内层循环,只需关注最低的股票价格。

 1 int maxProfit(int* prices, int pricesSize)
 2 
 3     if (pricesSize < 2)
 4         return 0;
 5     
 6     int sum = 0;
 7     int minVal = prices[0];
 8 
 9     for (int i = 1; i < pricesSize; i++)
10     
11         sum = (sum > (prices[i] - minVal) ? sum : (prices[i] - minVal));
12         minVal = (minVal < prices[i] ? minVal : prices[i]);
13     
14 
15     return sum;
16 

 

 

 

代码随想录算法训练营第四十九天|121买卖股票的最佳时机122买卖股票的最佳时机ii(代码片段)

代码随想录算法训练营第四十九天|121买卖股票的最佳时机122买卖股票的最佳时机IILeetCode121买卖股票的最佳时机题目:121.买卖股票的最佳时机动规五部曲:确定dp数组以及下标的含义**dp[i][0]表示第i天持有股票所得最多现金**确... 查看详情

123.买卖股票的最佳时机iii(三维dp)(代码片段)

123.买卖股票的最佳时机III   解释见如下代码: classSolutionpublic:intmaxProfit(vector<int>&prices)if(prices.size()==0)//容易忘的点return0;intdp[prices.size()+10][2][3];//天数有票没票第几次交易了for(inti= 查看详情

122.买卖股票的最佳时机ii(代码片段)

122.买卖股票的最佳时机II思路dp的定义依旧是dp[i][0]表示持有,dp[i][1]表示没有。可以多次买卖,计算持有时将上次的利润加上。可以利用滚动数组节约空间返回滚动数组最后的下标需要用size确定classSolutionpublicintmaxProfit(in... 查看详情

122.买卖股票的最佳时机ii(代码片段)

122.买卖股票的最佳时机II思路dp的定义依旧是dp[i][0]表示持有,dp[i][1]表示没有。可以多次买卖,计算持有时将上次的利润加上。可以利用滚动数组节约空间返回滚动数组最后的下标需要用size确定classSolutionpublicintmaxProfit(in... 查看详情

[javascript刷题]dp-买卖股票的最佳时机,leetcode121(代码片段)

[JavaScript刷题]DP-买卖股票的最佳时机,leetcode121githubrepo地址:https://github.com/GoldenaArcher/js_leetcode,Github的目录大概会更新的更勤快一些。题目地址:121.BestTimetoBuyandSellStock题目如下:Youaregivenanarrayprice 查看详情

309.最佳买卖股票时机含冷冻期dp(代码片段)

...以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票(即冷冻期为1天)。示例:输入:[1,2,3,0,2]输出:3... 查看详情

714.买卖股票的最佳时机含手续费(代码片段)

714.买卖股票的最佳时机含手续费思路在卖出比较的时候减去手续费即可classSolutionpublicintmaxProfit(int[]prices,intfee)intsize=prices.length;if(size==0)return0;//0持有股票,1无股票int[][]dp=newint[size][2];dp[0][0] 查看详情

123.买卖股票的最佳时机iii(代码片段)

123.买卖股票的最佳时机III思路dp,最多只能买卖两次,每天有五种状态,其中四种需要讨论。dp[i][]每天的各个状态的利润。卖出的利润一定比买入的利润大dp初始化时,看作第一天可以多次买入卖出。例如第一天... 查看详情

123.买卖股票的最佳时机iii(代码片段)

123.买卖股票的最佳时机III思路dp,最多只能买卖两次,每天有五种状态,其中四种需要讨论。dp[i][]每天的各个状态的利润。卖出的利润一定比买入的利润大dp初始化时,看作第一天可以多次买入卖出。例如第一天... 查看详情

leetcode买卖股票的最佳时机含手续费(代码片段)

动态规划简单题我们设置二维数组dp[size][2],其中dp[i][0]代表第i天不持有股票的最大价值其中dp[i][1]代表第i天持有股票的最大价值当天持有股票可以从前一天持有股票和前一天不持有股票现今买入转换得来当天不持有股票可... 查看详情

188.买卖股票的最佳时机iv(代码片段)

188.买卖股票的最佳时机IV思路dp二维数组的含义是第i天第k次交易状态(买入卖出)的利润;初始化dp数组时,所有的买入都是-price[0];所有的卖出都是0;递推的是第k次买入和卖出的利润;最后要返回的最后... 查看详情

714.买卖股票的最佳时机含手续费(代码片段)

1classSolution23public:4intmaxProfit(vector<int>&prices,intfee)56intn=prices.size();7vector<vector<int>>dp(n,vector<int>(2,0));89dp[0][0]=0;10dp[0][1]=-prices[0];11for(inti=1;i<n;i++)1213dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i]-fee);//没有持有14dp[i][1]=max(dp[... 查看详情

309.最佳买卖股票时机含冷冻期(代码片段)

309.最佳买卖股票时机含冷冻期思路四种dp状态:买入,卖出、今日卖出、冷冻初始化只需要将买入的设置为价格负数,其他三个卖出利润都是0classSolutionpublicintmaxProfit(int[]prices)intsize=prices.length;if(size==0)return0;/... 查看详情

309.最佳买卖股票时机含冷冻期(代码片段)

309.最佳买卖股票时机含冷冻期思路四种dp状态:买入,卖出、今日卖出、冷冻初始化只需要将买入的设置为价格负数,其他三个卖出利润都是0classSolutionpublicintmaxProfit(int[]prices)intsize=prices.length;if(size==0)return0;/... 查看详情

121.买卖股票的最佳时机(代码片段)

121.买卖股票的最佳时机思路dp是个二维数组,表示第i天持有和不持有的最高收益。数组初始化,对于第一天就入股的资产为-price[0],不买的为0;后面递推公式,对于持有和不持有的分别两种情况;持有的递推&#... 查看详情

121.买卖股票的最佳时机(代码片段)

121.买卖股票的最佳时机思路dp是个二维数组,表示第i天持有和不持有的最高收益。数组初始化,对于第一天就入股的资产为-price[0],不买的为0;后面递推公式,对于持有和不持有的分别两种情况;持有的递推&#... 查看详情

309.最佳买卖股票时机含冷冻期(代码片段)

1classSolution23public:4intmaxProfit(vector<int>&prices)56if(prices.size()<2)return0;7intn=prices.size();8vector<vector<int>>dp(n,vector<int>(2,0));910dp[0][0]=0;11dp[0][1]=-prices[0];12dp[1][0]=max(0,-prices[0]+prices[1]);13dp[1][1]=max(-prices[0],-prices[1]);14for(in... 查看详情

123.买卖股票的最佳时机iii(代码片段)

1classSolution23public:4intmaxProfit(vector<int>&prices)56if(prices.empty())return0;7intn=prices.size();8vector<vector<vector<int>>>dp(n,vector<vector<int>>(3,vector<int>(2,0)));910for(intk=1;k<=2;k++)1112dp[0][k][0]=0;13dp[0][k][1]=-prices[0];141516f... 查看详情