Closed PisecesPeng closed 3 years ago
private static int func(int[] ints) {
int length;
if ((length = ints.length) <= 1) return 0;
int result = 0; // 收益
boolean hasBuy = false; // 是否已买入
int buyPirce = 0; // 买入金额
for (int i = 1; i < length; i++) {
if (ints[i - 1] > ints[i] && hasBuy) { // 第i天的价格小于第i-1天的价格 且 是否早已买入
// 将股票卖出, 重置为未买入状态
result += ints[i - 1] - buyPirce;
hasBuy = false;
buyPirce = 0;
} else if (ints[i - 1] < ints[i] && !hasBuy) { // 第i天的价格大于第i-1天的价格
// 买入股票, 更新买入状态
hasBuy = true;
buyPirce = ints[i - 1];
}
// ints[i-1] == ints[i], 不做任何操作.
}
// 若最后还为'买入'状态, 则将最后一天的股票卖出
if (hasBuy) result += ints[length - 1] - buyPirce;
return result;
}
private static int func(int[] prices) {
int n = prices.length;
int[][] dp = new int[n][2];
dp[0][0] = 0;
dp[0][1] = -prices[0];
for (int i = 1; i < n; ++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[n - 1][0];
}
private static int func(int[] prices) {
int ans = 0;
int n = prices.length;
for (int i = 1; i < n; ++i) {
ans += Math.max(0, prices[i] - prices[i - 1]);
}
return ans;
}
买卖股票的最佳时期2
给定一个数组, 它的第 i 个元素是一支给定股票第 i 天的价格.
设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票).
注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票).
提示:
1 <= prices.length <= 3 * 10 ^ 4
.0 <= prices[i] <= 10 ^ 4
.题目地址: https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/