算法第一章 贪心算法

822 阅读1分钟

基本概念

贪心算法是一种思想,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解
贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。

leetcode 122

image.png 思想:利用贪心算法的思想,只要下一天卖出赚钱就卖

/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {
    let count = 0
    for(let i = 0; i < prices.length - 1; i++) {
        count = count + Math.max(0,prices[i+1] - prices[i])
    }
    return count
};

leetcode 860 柠檬水找零

image.png 思路:对于找零这种题目,优先考虑贪心算法
策略: 优先找最大的零钱,开辟两个空间,一个存5,一个存10,由于20不能给任何钱找零所以不存

var lemonadeChange = function(bills) {
    let five = 0, ten = 0;
    for (const bill of bills) {
        if (bill === 5) {
            five += 1;
        } else if (bill === 10) {
            if (five === 0) {
                return false;
            }
            five -= 1;
            ten += 1;
        } else {
            if (five > 0 && ten > 0) {
                five -= 1;
                ten -= 1;
            } else if (five >= 3) {
                five -= 3;
            } else {
                return false;
            }
        }
    }
    return true;
};