算法| ss 贪心

  • 134.加油站
  • 455.分发饼干
  • 860.柠檬水找零
  • 2171.拿出最少数目的魔法豆

134.加油站

javascript 复制代码
/**
 * @param {number[]} gas
 * @param {number[]} cost
 * @return {number}
 */
// 思路
// 判断: 汽油和 < 消耗和  return -1
// while循环遍历 从0开始, 计算是否有剩余 ,有就继续 没有就从下个点开始
// 不是绕一圈吗, 没看到代码
var canCompleteCircuit = function (gas, cost) {
  // 先判断是否有值
  let remainGas = 0;
  for (let i = 0; i < gas.length; i++) {
    remainGas += gas[i] - cost[i];
  }
  if (remainGas < 0) return -1;
  //
  let i = 0;
  let index = 0;
  let currentGas = 0;
  // 遍历循环

  while (i < gas.length) {
    currentGas += gas[i] - cost[i];
    // console.log("i, curgas", i, currentGas);
    // 大于等于都算
    if (currentGas >= 0) {
      i += 1;
    } else {
      //   console.log("上面不通, 下一个加油站");
      // 出发时的加油站编号, 索引
      index = i + 1;
      // 邮箱清0
      currentGas = 0;
      // 从下一个开始开发
      i += 1;
    }
  }
  return index;
};
console.log(canCompleteCircuit([1, 2, 3, 4, 5], [3, 4, 5, 1, 2]));
console.log(canCompleteCircuit([2, 3, 4], [3, 4, 3]));

// 输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]
// 输出: 3
// 输入: gas = [2,3,4], cost = [3,4,3]
// 输出: -1

455.分发饼干

javascript 复制代码
/**
 * @param {number[]} g
 * @param {number[]} s
 * @return {number}
 */
// 思路
// 小孩排序
// 饼干排序
// while  饼干 < 饼干长度
// 如果 饼干
var findContentChildren = function (g, s) {
  // 排序
  g.sort();
  s.sort();
  let child = 0;
  let cookie = 0;
  while (cookie < s.length) {
    // 饼干尺寸大于等于 还是胃口欲望值
    if (s[cookie] >= g[child]) {
      child += 1;
    }
    cookie += 1;
  }
  return child;
};
// 输入: g = [1,2,3], s = [1,1]
// 输出: 1

860.柠檬水找零

javascript 复制代码
/**
 * @param {number[]} bills
 * @return {boolean}
 */
// 思路
// 定义 5元和10元 数量
// for遍历账单  分3种场景
// 1: 5元 -> 5元数量++
// 2: 10元 -> if 有5元 10元++ 否则 false
// 3: 20元 -> if  有5元且有10元 5元-- 10元-- 否则 如果有5元数量>3  5元-=3 否则false
// 末尾返回true
var lemonadeChange = function (bills) {
  let five = 0;
  let ten = 0;
  for (let i = 0; i < bills.length; i++) {
    // 5元场景
    if (bills[i] === 5) {
      five += 1;
      // 10元场景
    } else if (bills[i] === 10) {
      if (five > 0) {
        ten += 1;
        five -= 1;
      } else {
        return false;
      }
    } else {
      if (ten > 0 && five > 0) {
        ten -= 1;
        five -= 1;
      } else {
        // 3张5元可以替换
        if (five >= 3) {
          five -= 3;
        }
        // 其他情况都是false
        else return false;
      }
    }
  }
  return true;
};
console.log(lemonadeChange([5, 5, 5, 10, 20]));
// 输入:bills = [5,5,5,10,20]
// 输出:true

2171.拿出最少数目的魔法豆

javascript 复制代码
/**
 * @param {number[]} beans
 * @return {number}
 */
// 思路
// 数组计算综合 并升序
// for循环遍历
// 关键计算方式:ans = Math.min(ans, sum - beans[i] * (beans.length - i));
var minimumRemoval = function (beans) {
  const sum = beans.reduce((x, y) => x + y, 0);
  beans.sort((a, b) => a - b);
  console.log(beans);
  let ans = sum;
  //   对于第个袋子 k, bean 个豆子,左边部分必须全部取出(小于等于),右边部分必须变成(大于等于) bean。可以用总和减去 bean * (beans.length - k)
  //   对于第k个袋子, 把k袋后面的每个袋子 -  k袋的数量 最小数目= 总和- k袋大小* k袋后面的数量
  for (let i = 0; i < beans.length; i++) {
    ans = Math.min(ans, sum - beans[i] * (beans.length - i));
  }
  console.log(ans);
  return ans;
};
minimumRemoval([4, 1, 6, 5]);

// [ 1, 4, 5, 6 ]
// i 0 12 12
// i 1 4 4
// i 2 6 4
// i 3 10 4
// 示例 1:

// 输入:beans = [4,1,6,5]
// 输出:4
// 解释:
// - 我们从有 1 个魔法豆的袋子中拿出 1 颗魔法豆。
//   剩下袋子中魔法豆的数目为:[4,0,6,5]
// - 然后我们从有 6 个魔法豆的袋子中拿出 2 个魔法豆。
//   剩下袋子中魔法豆的数目为:[4,0,4,5]
// - 然后我们从有 5 个魔法豆的袋子中拿出 1 个魔法豆。
//   剩下袋子中魔法豆的数目为:[4,0,4,4]
// 总共拿出了 1 + 2 + 1 = 4 个魔法豆,剩下非空袋子中魔法豆的数目相等。
// 没有比取出 4 个魔法豆更少的方案。
相关推荐
起个破名想半天了5 小时前
算法与数据结构之DFS深度优先遍历
数据结构·算法·深度优先
李伟_Li慢慢5 小时前
凸包算法
人工智能·算法
徐礼昭|商派软件市场负责人5 小时前
AI Agent 蜂群协作与经验基因化:从单体执行到自组织系统的工程路径
大数据·人工智能·算法·智能体·多agent
来者皆善5 小时前
【位RAW图像处理五】任意位深位图像的中值模糊快速实现及其应用。
图像处理·人工智能·算法
happyprince5 小时前
第三观 · 深刻不忘观 —— AngelSpec 哲学与升华
人工智能·算法
脚踏实地皮皮晨5 小时前
003002004_WPF Panel 基类 官方类定义
开发语言·windows·算法·c#·wpf·visual studio
啊真真真6 小时前
ArgoCD:我的GitOps探索之旅与未来展望
java·算法·argocd
就改了13 小时前
Java8 日期处理(详细版)
java·python·算法
2601_9583529014 小时前
接上USB,焊上麦,通话瞬间安静——WX-0813如何用AI降噪+100dB消回音,把嘈杂通话变成“金子“般清晰
人工智能·算法·语音识别·硬件开发·语音模块·降噪消回音
小蒋学算法15 小时前
算法-M个非重叠子数组最大和II-WQS二分学习
数据结构·学习·算法