贪心算法(Greedy)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012292754/article/details/87741992

1 贪心算法

对问题求解时,总是做出在当前看来是最好的选择

1.1 适用贪心算法的场景

  • 问题能够分解成子问题来解决,子问题的最优解可以递推到最终问题的最优解。这种子问题最优解成为最优子结构;
  • 贪心算法与动态规划不同的是,它对每个子问题的解决方案都做出选择,不能回退。动态规划则会保存以前的计算结果,并根据以前的结果对当前进行选择,有回退的功能。

2 买卖股票的最佳时间

https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/description/

  • 思路1: DFS,深度优先搜索。每一天的状态,可以买1股,或者卖1股;O(2^n)
  • 思路2: 贪心算法,O(n)
  • 思路3: 动态规划,O(n)
public int maxProfit_2(int[] prices) {
        int maxprofit = 0;

        for (int i = 1; i < prices.length; i++) {
            if (prices[i] > prices[i - 1]) {
                maxprofit += prices[i] - prices[i - 1];
            }
        }

        return maxprofit;
    }

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/87741992