1. 贪心算法核心思想与应用场景
贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最优决策的算法策略。这种"局部最优导致全局最优"的思想,使其成为解决最优化问题的高效工具。在实际应用中,贪心算法特别适合以下三类问题:
- 区间调度问题:如会议室安排、课程选择等需要最大化活动数量的场景
- 覆盖问题:如基站覆盖、跳跃游戏等需要最小化资源使用的场景
- 最值问题:如股票买卖、找零钱等需要计算极值的场景
贪心算法之所以能在LeetCode热题中频繁出现,关键在于它通常能将O(n²)的暴力解法优化到O(n)的时间复杂度。以股票买卖问题为例,暴力解法需要双重循环计算所有买卖组合,而贪心算法通过维护历史最低价,仅需一次遍历即可确定最大利润。
关键理解:贪心算法不是万能的,其正确性依赖于问题具有"贪心选择性质"——即局部最优解能导致全局最优解。在使用前必须验证问题是否满足这个特性。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 股票买卖问题:121. 买卖股票的最佳时机
2.1 问题本质与暴力解法
这个问题要求找到数组中后减前的最大差值(且必须后大于前)。最直观的暴力解法是:
java复制int maxProfit = 0;
for (int i = 0; i < prices.length; i++) {
for (int j = i + 1; j < prices.length; j++) {
maxProfit = Math.max(maxProfit, prices[j] - prices[i]);
}
}
return maxProfit;
这种解法时间复杂度为O(n²),在LeetCode上提交会导致超时。
2.2 贪心策略的优化思路
我们发现其实不需要计算所有组合。对于任意一个卖出点prices[i],能获得的最大利润只与它之前的最低买入价有关。因此可以:
- 维护一个变量记录历史最低价minPrice
- 遍历时计算当前价格与minPrice的差值
- 更新最大利润maxProfit
这种思路将问题转化为单次遍历中的极值维护问题。
2.3 代码实现与边界处理
java复制public int maxProfit(int[] p
