贪心算法是什么?
贪心算法是 算法设计中的一种方法
期盼通过每个阶段的局部最优选择,从而达到全局的最优
结果并不一定是最优
零钱兑换
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;
};