javascript中的算法动态规划之找零问题

news2024/9/9 7:41:00

动态规划

1. 深度优先算法
2. 递归解决斐波拉契数列
 (1) 定义子问题;
 (2) 实现要反复执行来解决子问题的部分(这一步要参考前一节讨论的递归的步骤);
 (3) 识别并求解出边界条件。
function MinCoinChange(coins) {
  let cache = {};
  let _that = this;
  this.makeChange = function (amount) {
    if (!amount) return [];
    if (cache[amount]) return cache[amount];

    let min = [],
      newMin,
      newAmount;
    for (let i = 0; i < coins.length; i++) {
      let coin = coins[i];
      newAmount = amount - coin;
      if (newAmount >= 0) {
        ## 这里在不断的迭代,去寻找最优解
        newMin = _that.makeChange(newAmount);
      }
      console.log("🚀 ~ MinCoinChange ~ newAmount:", newAmount);
      ## 退出迭代的边界条件
      if (
        newAmount >= 0 &&
        (newMin.length < min.length - 1 || !min.length) &&
        (newMin.length || !newAmount)
      ) {
        min = [coin].concat(newMin);
        console.log(min, "min");
      }
    }
    return (cache[amount] = min);
  };
}

const minCoinChange = new MinCoinChange([1, 5, 10, 25]);
console.log(minCoinChange.makeChange(36)); //[1,10,25]
const minCoinChange2 = new MinCoinChange([1, 3, 4]);
console.log(minCoinChange2.makeChange(6)); // [3, 3]

贪心算法版的硬币找零问题

贪心算法遵循一种近似解决问题的技术,通过每个阶段的局部最优选择(当前最好的解),从而达到全局的最优(全局最优解)。

  • 尽量取最大的面额,减小硬币数
  • 迭代有序的面额数组,从后面向前
function MinCoinChange(coins) {
  this.makeChange = function (amount) {
    let change = [],
      total = 0;
    for (let i = coins.length - 1; i >= 0; i--) { 
      let coin = coins[i];
      while (total + coin <= amount) {
        change.push(coin);
        total += coin;
      }
    }
    return change;
  };
}

const minCoinChange = new MinCoinChange([1, 5, 10, 25]);
console.log(minCoinChange.makeChange(36)); //[ 25, 10, 1 ]

这样,我们就实现了贪心算法版的最小硬币找零问题,代码比动画的递归简单了很多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不懂就问:EI论文真的很水吗?如何快速水一篇EI论文呢?

最近在有刷到一个这样的话题&#xff0c;发表一篇EI论文容易吗&#xff1f; 很多人可能会觉得EI没有什么用&#xff0c;但其实EI的含金量也很高。 比如目前有很多单位的老师在评选职称的时候&#xff0c;EI会议中的iee系列依然比发表一篇北大核心还高。 那发表EI论文到底容…

springboot家校共育平台-计算机毕业设计源码54235

摘 要 采用高效的SpringBoot框架&#xff0c;家校共育平台为家长与教师提供了便捷的沟通渠道。该平台整合了丰富的教育资源&#xff0c;实现了家校之间的即时信息互通&#xff0c;从而助力协同教育。 为进一步方便用户访问和使用&#xff0c;平台与微信小程序进行了深度整合。家…

WPF ViewBox,Canva之SVG

ViewBox Viewbox是WPF中的一个内容控件&#xff0c;它可以自动调整其内部子元素的大小以适应其自身的尺寸。Viewbox通过保持子元素原有的宽高比&#xff0c;对内容进行均匀的缩放&#xff0c;使其完全填充控件的空间。 Stretch Stretch属性决定了Viewbox如何缩放其内容。它可…

IMU用于野外动作质量评估

近期&#xff0c;来自日本的研究者开发出一个名为MMW-AQA的创新性数据集&#xff0c;该数据集融合了多种传感器信息&#xff0c;专门设计用于用于客观评价人类在复杂环境下的动作质量&#xff0c;这一突破为运动分析和智能安全系统的优化提供了新的可能。 MMW-AQA数据集结合了毫…

MVC软件设计模式及QT的MVC架构

目录 引言 一、MVC思想介绍 1.1 MCV模型概述 1.2 Excel的处理数据 1.3 MVC模式的优势 二、QT中的MVC 1.1 模型&#xff08;Model&#xff09; 1. QAbstractItemModel 2. QStringListModel 3. QStandardItemModel 4. QSqlTableModel 和 QSqlQueryModel 5. QAbstract…

为什么建议使用 for…of 循环而不是 foreach 循环呢

在 JavaScript 和 TypeScript 的世界里&#xff0c;遍历数组是一项常见任务。许多开发者因为 .forEach 的简单和熟悉而习惯使用它。 然而&#xff0c;有一个更强大且更灵活的替代方案&#xff1a;for…of 循环。&#x1f52e; 本文将深入探讨为什么你应该考虑切换到 for…of 以…

JAVA文档注释

文档注释&#xff0c;它以 /** 开始&#xff0c;以 */ 结束。 你可以使用 javadoc 工具软件来生成信息&#xff0c;并输出到 HTML 文件中。 文档注释&#xff0c;使你更加方便的记录你的程序信息。 javadoc标签 在开始的 /** 之后&#xff0c;第一行或几行是关于类、变量和方…

全渠道AI数字化商品管理 零售品牌增长“超级引擎”

随着“流量红利”时代的终结 品牌面临增速放缓、利润下滑的双重挑战。 消费者的诉求日益理性和个性化&#xff0c; 国内外品牌角逐市场份额 A1、大数据等先进技术迅猛发展 品牌商品计划管理变得更加复杂而多维。 零售品牌正加速数字化与全渠道融合以应对挑战。 可持续盈利…

深度技术Win10系统免费下载,正式版/精简版任选!

深度技术Win10系统是非常受欢迎的操作系统版本之一&#xff0c;拥有丰富的系统功能&#xff0c;无论是日常办公、学习娱乐还是专业设计&#xff0c;它都能轻松应对。但是&#xff0c;许多新手用户不知道在哪里可以下载到深度技术Win10版本系统&#xff1f;接下来系统之家小编给…

大数据信用报告信用等级怎么看?

在大数据技术的加持之下&#xff0c;金融风控也逐渐运用大数据技术了&#xff0c;也就是我们说的大数据或者大数据信用&#xff0c;在大数据信用报告中对个人的综合信用风险有着等级划分&#xff0c;那大数据信用报告信用等级怎么看呢?本文为你详细介绍一下&#xff0c;感兴趣…

如何用nginx反代一个https的网站

最近笔者发现原本设置的一个反代无法使用了&#xff0c;查看后发现是后端服务器升级导致&#xff0c;现在必须使用https来访问&#xff0c;故而需要更改对应的nginx配置&#xff0c;趁此机会水一篇文章 一、【问题描述】 如何用nginx反代一个https的网站 二、【知识补充】 …

A Survey of Non-Volatile Main Memory File Systems——论文泛读

JCST 2023 Paper 分布式元数据论文阅读笔记整理 问题 非易失性存储器&#xff08;NVM&#xff09;提供比块设备更低的延迟和更高的带宽&#xff0c;支持字节可寻址&#xff0c;并提供可用作内存级存储设备&#xff08;非易失性主存储器&#xff0c;NVMM&#xff09;的持久性。…

7.31IO进程线程

IO思维导图 标准IO 文件IO

idea自定义模版、快捷键

原文地址&#xff1a;【IDEA】常用插件、设置、注释_idea注释插件-CSDN博客 创建模版组&#xff1a;MyTemplates 创建模版&#xff1a;forThread&#xff1a;循环打印出10个线程 第四步 for (int i 1; i < 10; i) {new Thread(() -> {$END$}, String.valueOf(i)).star…

实验2-5-6 求幂之和

#include<stdio.h> #include<math.h>int main() {int n 0;scanf("%d",&n);int sum 0;for (int i 1; i<n; i){sumsumpow(2,i);}printf("result %d",sum); }

SC,LC,FC光纤连接器接头

前言&#xff1a; &#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留…

【CPP】优先级队列

目录 1.什么是优先级队列&#xff1f;&#xff1f;&#xff1f;2.优先级队列的基本使用与理解3.优先级队列的模拟实现 今天来简单分享一下写一个极简版的优先级队列。 1.什么是优先级队列&#xff1f;&#xff1f;&#xff1f; 优先级队列属于STL中队列的一种&#xff0c;虽然…

vi编辑器的使用

vi 编辑器 vi是Linux中最基本的编辑器。但vi编辑器在系统管理、服务器配置工作中永远都是无可替代的。 一、vi的三种模式及模式切换命令 1、命令行模式 用户在用vi编辑文件时&#xff0c;最初进入的为该模式。可以进行复制、粘贴等操作。 2、插入模式 进行文件编辑&#xf…

【计算机情绪分析】十大数据集合集!宝藏合集,速看!

本文将为您介绍10个经典、热门的数据集&#xff0c;希望对您在选择适合的数据集时有所帮助。 1 AWARE 发布方&#xff1a; Imam Abdulrahman Bin Faisal University法赫德国王石油与矿产大学 发布时间&#xff1a; 2021-09-26 简介&#xff1a; AWARE 数据集的同行评审论文发…

Maven实战.插件

文章目录 插件目标插件绑定内置绑定自定义绑定 插件配置命令行插件配置POM中插件全局配置POM中插件任务配置 插件目标 在进一步详述插件和生命周期的绑定关系之前&#xff0c;必须先了解插件目标&#xff08;PluginCoal&#xff09;的概念。我们知道&#xff0c;Maven 的核心仅…