目录
前言
买入股票的最佳时机(1)
买入股票的最好时机(2)
前言
当你踏上贪心算法的旅程,仿佛置身于一场智慧的盛宴,每一步都是对问题解决方案的审慎选择,每一次决策都是对最优解的向往。贪心算法以其简洁高效的特性,被广泛运用于解决各类优化问题,无论是在算法竞赛的舞台上,还是在实际工程的应用中,都展现着其独特的魅力。
在这篇博客中,我将带领大家深入探索贪心算法的精髓,从经典问题到实际案例,一一呈现其妙不可言喻之处。透过习题讲解,我们将一同揭开贪心算法的神秘面纱,探寻其中的逻辑与技巧,希望能够为各位读者提供一份清晰的指南,助力你们在算法的海洋中航行无忧。
无论是初学者抑或是算法高手,都能从中收获不少启发与收获。让我们一起启程,探索贪心算法的奥秘,开启算法之旅的新篇章!
买入股票的最佳时机(1)
. - 力扣(LeetCode)
我们可以按照以卖的点的位置进行思考,以 i 位置进行出售,就只需要求 0 ~ i - 1 位置内买入的最小值即可,然后把每个位置的最大值求出来,即可通过O(n)的复杂度解决这道问题。
代码实现,我把上面的思路分析都用代码注释标注了
class Solution {
public int maxProfit(int[] arr) {
int min = Integer.MAX_VALUE;// 记录i - 1位置的最小值
int max = Integer.MIN_VALUE;// 卖出股票会得到的最大利润
for (int i = 0; i < arr.length - 1; i++) {
min = Math.min(min, arr[i]);// 计算前面的最小值
max = Math.max(max, arr[i + 1] - min);// 更新最大值
}
return Math.max(max, 0);
}
}
买入股票的最好时机(2)
. - 力扣(LeetCode)
贪心算法的思想是在每一步都选择当前状态下的最优解,以期望最终获得全局的最优解。对于这个问题,我们可以通过找到股票价格的递增区间,并在每个递增区间内进行买入和卖出操作,以获得最大利润。
这一题的解决方案就和下图一样画出增长区间,求出所有增长区间的值之和,也就是最终答案。
- 遍历股票价格数组,从第二天开始。
- 如果当前股票价格比前一天高,说明可以在前一天买入,当前天卖出,获得利润。
- 将每次获得的利润累加起来,得到最终的总利润。
class Solution {
public int maxProfit(int[] prices) {
int result = 0;
for(int i = 1;i < prices.length;i++){//从第二个位置开始
if(prices[i] > prices[i - 1]){
//通过求每一段增长区间的值来求最终增长区间的值(每个增长区间我都要)
result += prices[i] - prices[i - 1];
}
}
return result;
}
}
因为买入股票最好时机3和4都是动态规划实现的,我将在下一篇进行讲解
总结
在这篇博客中,我们将深入探讨贪心算法的精髓,从经典问题到实际案例,一一呈现其独特的魅力。通过习题讲解,我们将揭开贪心算法的神秘面纱,探寻其中的逻辑与技巧,为读者提供清晰的指南。无论是初学者还是算法高手,都能从中获得启发与收获。让我们一起启程,探索贪心算法的奥秘,开启算法之旅的新篇章!此外祝大家周末愉快。