You are given an integer array prices where prices[i] is the price of a given stock on the ith day.
On each day, you may decide to buy and/or sell the stock. You can only hold at most one share of the stock at any time. However, you can buy it then immediately sell it on the same day.
Find and return the maximum profit you can achieve.
Example 1:
Input: prices = [7,1,5,3,6,4] Output: 7 Explanation: Buy on day 2 (price = 1) and sell on day 3 (price = 5), profit = 5-1 = 4. Then buy on day 4 (price = 3) and sell on day 5 (price = 6), profit = 6-3 = 3. Total profit is 4 + 3 = 7.
Example 2:
Input: prices = [1,2,3,4,5] Output: 4 Explanation: Buy on day 1 (price = 1) and sell on day 5 (price = 5), profit = 5-1 = 4. Total profit is 4.
Example 3:
Input: prices = [7,6,4,3,1] Output: 0 Explanation: There is no way to make a positive profit, so we never buy the stock to achieve the maximum profit of 0.
Constraints:
1 <= prices.length <= 3 * 104 0 <= prices[i] <= 104
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii
我自己没写出来,没有思路。可能是我做的还是太少了。再积累点。。
这边直接给看官方答案好了。
public static int maxProfit(int[] prices) {
int n = prices.length;
int[][] dp = new int[n + 1][2]; // dp[i][0] 代表第i天持有票的收入,dp[i][1] 代表第i天不持有股票第收入。
dp[1][0] = -prices[0]; // 第一天持有股票,第一天花钱买入了。
dp[1][1] = 0; // 第一天不持有股票
for (int i = 2; i < n + 1; i++) {
dp[i][0] = Math.max(dp[i - 1][0], dp[i - 1][1] - prices[i - 1]);
dp[i][1] = Math.max(dp[i - 1][1], dp[i - 1][0] + prices[i - 1]);
}
return Math.max(dp[n][0], dp[n][1]);
}
public static int maxProfit2(int[] prices) {
int n = prices.length;
int have = -prices[0];
int notHave = 0;
for (int i = 2; i < n + 1; i++) {
have = Math.max(have, notHave - prices[i - 1]);
notHave = Math.max(notHave, have + prices[i - 1]);
}
return Math.max(have, notHave);
}
1-4:总结
今天两道力扣,只写出了一道,哈哈哈,还需要努力啊,加油呀,河海哥。



