https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/
给你一个整数数组 prices
,其中 prices[i]
表示某支股票第 i
天的价格。
在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。
返回 你能获得的 最大 利润 。
今天这道题目给大家分享的解题方法是贪心算法! (tips:贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。它不从整体最优上加以考虑,所做出的仅是在某种意义上的局部最优解 。)
示例 1:
输入: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 。
示例 2:
输入:prices = [7,6,4,3,1] 输出:0 解释:在这种情况下, 交易无法获得正利润,所以不参与交易可以获得最大利润,最大利润为 0。
通过示例分析来看,这个题目就是一个简单的买卖问题,通过给定的数组,求出股票分别在哪天购买或卖出能取得到的收益最大。暂且归类为最值问题。
下面我们一起来解决一下这道题目吧!
通过实例分析,现在有个想法,就是我们首先需要判断的是买入和卖出相比哪个更贵。这里就需要进行两两相比,比较数组中前后两个元素的大小,从而判断出,今天买入的股票明天适不适合卖掉。
那么通过上述的分析,相信大家已经想到了应该先需要遍历数组进行两两比较来判断出今天卖出是否会带来收益。
int maxProfit(int* prices, int pricesSize) {
// 遍历价格数组,直到倒数第二个元素
for (int i = 0; i + 1 < pricesSize; i++) {
// 如果后一天的价格高于前一天的价格
if (prices[i] < prices[i + 1]) {
}
}
}
也就是这样,(这里需要注意一定是i+1
欧克,现在已经完成了第一步,那么接下来应该做什么呢?对!就是吧这些i
int maxProfit(int* prices, int pricesSize) {
// 初始化总利润为0
int profit = 0;
// 遍历价格数组,直到倒数第二个元素
for (int i = 0; i + 1 < pricesSize; i++) {
// 如果后一天的价格高于前一天的价格
if (prices[i] < prices[i + 1]) {
// 计算并累加这两天的利润
profit += prices[i + 1] - prices[i];
}
}
至此,本题距离结束仅差最后一步。注意看,这里的函数返回值为int类型,也就是在函数结束时,我们需要返回一个为int类型的数据。嗯....答案已经写完了,就差交卷了嘛。这里直接在最后加上return profit;即可!
int maxProfit(int* prices, int pricesSize) {
// 初始化总利润为0
int profit = 0;
// 遍历价格数组,直到倒数第二个元素
for (int i = 0; i + 1 < pricesSize; i++) {
// 如果后一天的价格高于前一天的价格
if (prices[i] < prices[i + 1]) {
// 计算并累加这两天的利润
profit += prices[i + 1] - prices[i];
}
}
// 返回计算得到的总利润
return prifit;
}
程序完美通过!完结撒花!!!
maxProfit
接受一个整数数组指针prices
和数组的大小pricesSize
作为参数。for
循环遍历数组prices
,每次比较相邻的两个元素prices[i]
和prices[i + 1]
。prices[i]
小于prices[i + 1]
,说明后一天价格上涨,计算并累加利润prices[i + 1] - prices[i]
到变量profit
中。profit
。在关于“买卖股票的最佳时机 II”算法问题我们深入探讨了通过贪心算法解决股票交易获取最大利润的问题。从算法的实现思路到代码的详细解读,希望能帮助大家清晰地理解其内在逻辑。贪心算法在这个场景中展现了简洁高效的特点,通过局部最优决策逐步达成全局的利润最大化。
当然,这只是算法世界中的一个小案例,贪心算法在众多领域都有着广泛的应用和深入的研究价值。如果你对算法有更浓厚的兴趣,不妨继续探索其他类似的优化问题,相信会有更多的收获和启发。同时,也欢迎大家在评论区分享自己的见解和疑问,让我们一起在算法的海洋中不断前行,挖掘更多解决问题的巧妙方法,提升我们的编程和逻辑思维能力。期待与大家在下一个算法问题中相遇!谢谢大家,荆轲刺秦!(败在剑=“拜,再见”)❤️❤️❤️