0. 概念
贪心算法追求的是一种近似解决问题的技术。最后得到的方案可能不是最优方案。
1. 最少硬币找零
从尽可能使用大面额的零钱来找零。
function minCoinChange(coins, amount) {
const cache = [];
let total = 0;
for (let i = coins.length - 1; i >= 0; i--) {
const coin = coins[i];
while (total + coin <= amount) {
cache.push(coin);
total += coin;
}
}
return cache;
}
2. 分数背包问题
function snapStack(capacity, weights, values) {
// 背包剩余的空间
let load = 0;
// 已经装入背包的重量
let val = 0;
for (let i = 0; i < values.length && load < capacity; i++) {
if (weights[i] + load <= capacity) {
load += weights[i];
val += values[i];
}
else {
const percentage = (capacity - load) / capacity;
load += percentage * weights[i];
val += percentage * values[i];
}
}
return val;
}