网站建设flash,佛山网络,网站建设合同属于技术服务么,金坛常州做网站刷题顺序及思路来源于代码随想录#xff0c;网站地址#xff1a;https://programmercarl.com
目录
121. 买卖股票的最佳时机 - 力扣#xff08;LeetCode#xff09;
122. 买卖股票的最佳时机 II - 力扣#xff08;LeetCode#xff09;
123. 买卖股票的最佳时机 III …刷题顺序及思路来源于代码随想录网站地址https://programmercarl.com
目录
121. 买卖股票的最佳时机 - 力扣LeetCode
122. 买卖股票的最佳时机 II - 力扣LeetCode
123. 买卖股票的最佳时机 III - 力扣LeetCode 121. 买卖股票的最佳时机 - 力扣LeetCode
给定一个数组 prices 它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润返回 0
输入[7,1,5,3,6,4]
输出5
解释在第 2 天股票价格 1的时候买入在第 5 天股票价格 6的时候卖出最大利润 6-1 5 。注意利润不能是 7-1 6, 因为卖出价格需要大于买入价格同时你不能在买入前卖出股票。 /*** author light* Description 买股票的最佳时机。** (思路分为持有和不持有状态(持有不代表当天买入持有是一种状态同理不持有也是* 1.持有以前就持有或者当天才持有* 2.不持有以前就不持有或者当天卖出不持有* create 2023-10-13 13:48*/
public class MaxProfitTest {public int maxProfit(int[] prices) {//dp[i][0]:第i天不持有股票所获得的最大利润//dp[i][1]:第i天持有股票所获得的最大利润int[][] dpnew int[prices.length][2];dp[0][0]0;dp[0][1]-prices[0];for (int i 1; i prices.length; i) {dp[i][0] Math.max(dp[i-1][0],dp[i-1][1]prices[i]); //不持有以前不持有/现在卖出dp[i][1] Math.max(dp[i-1][1],-prices[i]); //持有以前持有/现在买入}return dp[prices.length-1][0];}
}122. 买卖股票的最佳时机 II - 力扣LeetCode
给你一个整数数组 prices 其中 prices[i] 表示某支股票第 i 天的价格。
在每一天你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买然后在 同一天 出售。
返回 你能获得的 最大 利润 。
输入prices [7,1,5,3,6,4]
输出7
解释在第 2 天股票价格 1的时候买入在第 3 天股票价格 5的时候卖出, 这笔交易所能获得利润 5 - 1 4 。随后在第 4 天股票价格 3的时候买入在第 5 天股票价格 6的时候卖出, 这笔交易所能获得利润 6 - 3 3 。总利润为 4 3 7 。 /*** author light* Description 买股票的最佳时机II** 两种情况分为持有和不持有* 1.持有以前就持有/以前不持有现在持有* 2.不持有以前就不持有/以前持有现在不持有* create 2023-10-13 15:11*/
public class MaxProfit2Test {public int maxProfit(int[] prices) {//dp[i][0]:第i天持有股票所获得的最大利润//dp[i][1]:第i天不持有股票所获得的最大利润int[][] dpnew int[prices.length][2];dp[0][0]-prices[0];dp[0][1]0;for (int i 0; i prices.length; i) {//持有区别于买股票的最佳时机那道题注意这里题干是每一天意思是持有情况可能在前一天有利润情况下持有本次股票dp[i][0]Math.max(dp[i-1][0],dp[i-1][1]-prices[i]);dp[i][1] Math.max(dp[i-1][1],dp[i-1][0]prices[i]); //不持有}return dp[prices.length-1][1];}
}123. 买卖股票的最佳时机 III - 力扣LeetCode
给定一个数组它的第 i 个元素是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。
注意你不能同时参与多笔交易你必须在再次购买前出售掉之前的股票。
输入prices [3,3,5,0,0,3,1,4]
输出6
解释在第 4 天股票价格 0的时候买入在第 6 天股票价格 3的时候卖出这笔交易所能获得利润 3-0 3 。随后在第 7 天股票价格 1的时候买入在第 8 天 股票价格 4的时候卖出这笔交易所能获得利润 4-1 3 。
/*** author light* Description 买股票的最佳时机III** 思路最多能买两只股票则有共有5个状态* 0.没有操作* 1.第一次持有股票--第一次一直持有/之前不持有现在持有* 2.第一次不持有股票--第一次一直不持有/之前持有现在不持有* 3.第二次持有股票--第二次一直持有/第一次后不持有现在持有* 4.第二次不持有股票--第一次后一直不持有/第一次后不持有现在持有* create 2023-10-13 16:11*/
public class MaxProfit3Test {public int maxProfit(int[] prices) {int[][] dpnew int[prices.length][5];dp[0][0]0;dp[0][1]-prices[0];dp[0][2]0;dp[0][3]-prices[0];dp[0][4]0;for (int i 1; i prices.length; i) {dp[i][1] Math.max(dp[i][0]-prices[i],dp[i-1][1]);dp[i][2]Math.max(dp[i-1][2],dp[i-1][1]prices[i]);dp[i][3]Math.max(dp[i-1][3],dp[i-1][2]-prices[i]);dp[i][4]Math.max(dp[i-1][4],dp[i-1][3]prices[i]);}return dp[prices.length-1][4];}}