数据结构与算法--贪心算法

216 阅读1分钟

贪心算法是什么?

贪心算法是 算法设计中的一种方法

期盼通过每个阶段的局部最优选择,从而达到全局的最优

结果并不一定是最优

零钱兑换

coints是能够使用的不同面额的硬币,变量amount是要兑换的总额,求出能够兑换总额的最少硬币数

分发饼干(力扣455)

局部最优:既能满足孩子,还消耗最少。先将“较小的饼干”分给“胃口最小”孩子。算法步骤:

  • 1、先对饼干数组和胃口数组进行升序排序
  • 2、遍历饼干数组找到能满足第一个孩子的饼干
  • 3、然后继续遍历饼干数组,找到满足第二、三...n个孩子的饼干
/**
 * @param {number[]} g
 * @param {number[]} s
 * @return {number}
 */
var findContentChildren = function(g, s) {
    const sortFunc = function(a, b){
        return a - b;
    }
    g.sort(sortFunc);
    s.sort(sortFunc);

    let i = 0;
    s.forEach(function(n){
        if(n >= g[i]){
            i++;
        }
    })
    return i;
};

买卖股票的最佳时机II(力扣122)

前提:上帝视角,知道未来的价格。局部最优:见好就收,见差就不动,不做任何长远打算。算法步骤:

  • 1、新建一个变量用来统计总利润
  • 2、遍历价格数组,如果当前价格比昨天高,就在昨天买,今天卖,否则就不交易
  • 3、遍历结束后,返回所有交易利润之和
/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {
    let profit = 0;

    for(let i = 1; i<= prices.length; i++){
        if(prices[i] > prices[i-1]){
            profit += (prices[i] -prices[i-1]);
        }
    }
    return profit;
};

知识来源:coding.imooc.com/learn/list/…