Skip to content

贪心算法

454 字约 2 分钟

算法

2024-12-28

力扣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);