贪心算法
力扣122题买卖股票的最佳时机 II
给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。 在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买,然后在 同一天 出售。 返回 你能获得的 最大 利润 。
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码实现
var maxProfit = function (prices) {
// 记录利润
let num = 0;
// 解法一 通过if判断当天的价格是否大于前一天,大于前一天就卖出,统计卖出的最大利润
for (let i = 1; i < prices.length; i++) {
if (prices[i] > prices[i - 1]) {
num += prices[i] - prices[i - 1]
}
}
// 解法二 通过Math.max计算今天价格和昨天的差值 和0进行比较,差值大于0盈利则返回相加,小于0则亏损收益加0
for (let i = 1; i < prices.length; i++) {
num += Math.max(0, prices[i] - prices[i - 1])
}
return num;
};
console.log(maxProfit([7, 1, 5, 3, 6, 4]));
找零问题
给你一个整数数组 coins ,其中 coins[i] 表示可找零的金额面值。 根据给定金额返回最优找零结果。
代码实现
function greedyCoinChange(coins, amount) {
// 将硬币面额从大到小排序
coins.sort((a, b) => b - a);
let result = [];
let remainingAmount = amount;
for (let coin of coins) {
while (remainingAmount >= coin) {
result.push(coin);
remainingAmount -= coin;
}
}
// 如果剩余金额不为0,说明无法找零
if (remainingAmount !== 0) {
return null;
}
return result;
}
// 示例用法
const coins = [1, 5, 10, 20]; // 金额面额
const amount = 17; // 需要找零的金额
const change = greedyCoinChange(coins, amount);
console.log("找零结果:", change);