LeetCode Best Time to Buy and Sell Stock IV

本文针对LeetCode上的一道经典动态规划题目“Best Time to Buy and Sell Stock IV”提供了详细的解答思路与Java代码实现。文章介绍了如何根据交易次数限制设计算法以求得最大利润,并考虑了特殊情况下的简化处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题链接在这里:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-iv/

题目:

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete at most k transactions.

Note:
You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again). 

题解:

本题是Best Time to Buy and Sell Stock III的general情况。

但这里要注意若是k很大已经超过了prices.length的时候, 若是按照DP的方法做会浪费时间以及空间. 此时可以直接参照Best Time to Buy and Sell Stock II做法.

Time Complexity: O(prices.length * k), k是最多交易次数.

Space: O(k).

AC Java:

 1 public class Solution {
 2     public int maxProfit(int k, int[] prices) {
 3         if(prices == null || prices.length == 0 || k == 0){
 4             return 0;
 5         }
 6         if(k>=prices.length/2){
 7             int res = 0;
 8             for(int i = 1; i < prices.length; i++){
 9                 res += Math.max(0, prices[i]-prices[i-1]);
10             }
11             return res;
12         }
13         
14         int[] local = new int[k+1];
15         int[] global = new int[k+1];
16         for(int i = 1; i<prices.length; i++){
17             int diff = prices[i] - prices[i-1];
18             for(int j = k; j>=1; j--){
19                 local[j] = Math.max(global[j-1] + Math.max(diff,0), local[j] + diff);
20                 global[j] = Math.max(global[j], local[j]);
21             }
22         }
23         return global[k];
24     }
25 }

 

转载于:https://www.cnblogs.com/Dylan-Java-NYC/p/4824944.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值