浏览器打开网站北京通州网站设计公司

news/2025/9/23 17:22:59/文章来源:
浏览器打开网站,北京通州网站设计公司,易企秀可以做网站吗,泰安二手房一文了解贪心算法和回溯算法在前端中的应用一、贪心算法1、贪心算法是什么#xff1f;2、应用场景3、场景剖析#xff1a;零钱兑换二、回溯算法1、回溯算法是什么#xff1f;2、什么问题适合选用回溯算法解决#xff1f;2、应用场景3、场景剖析#xff1a;全排列三、贪心算… 一文了解贪心算法和回溯算法在前端中的应用一、贪心算法1、贪心算法是什么2、应用场景3、场景剖析零钱兑换二、回溯算法1、回溯算法是什么2、什么问题适合选用回溯算法解决2、应用场景3、场景剖析全排列三、贪心算法常见应用1、leetcode 455分发饼干2、leetcode 122买卖股票的最佳时机四、回溯算法常见应用1、leetcode 46全排列2、leetcode 78子集五、写在最后在我们日常的生活中经常会碰到贪心算法和回溯算法的应用场景。比如贪心算法常应用于最少硬币找零问题分数背包等问题。而回溯算法常用于迷宫求解、N皇后等问题。这两种各有各的优点也各有各的不足。 在下面的这篇文章中将讲解贪心算法和回溯算法的常见应用场景以及分析高频 leetcode 算法题。 一起来学习⑧ 一、贪心算法 1、贪心算法是什么 贪心算法是算法设计中的一种方法。期盼通过每个阶段的局部最优选择从而达到全局的最优。结果不一定最优。 2、应用场景 最少硬币找零问题分数背包问题…… 3、场景剖析零钱兑换 先用一张图来描述输入输出结果。 从上图中可以看到如果用贪心算法解决零钱兑换问题的话它会先从最大面额的硬币开始拿尽可能多的这种硬币找零。当无法再拿更多这种价值的硬币时开始拿第二大价值的硬币依次继续。 大家可以发现如果是第一种情况确实可以达到理论最优。但是如果是第二种情况的话还有一种更优的解法那就是6 3 3。所以说贪心算法并不总是能得到最优答案。 但是呢虽说不能总是能得到最优答案那我们为什么还有用它呢 比起动态规则算法而言贪心算法更简单、更快。虽然它并不总是能得到最优的答案但是综合来看它相对执行时间来说输出了一个可以接受的解。 二、回溯算法 1、回溯算法是什么 回溯算法是算法设计中的一种方法。回溯算法是一种渐进式寻找并构建问题解决方式的策略。回溯算法会先从一个可能的动作开始解决问题如果不行就回溯选择另一个动作直到将问题解决。 2、什么问题适合选用回溯算法解决 有很多路。这些路里面有死路有活路。通常需要递归来模拟所有的路。 2、应用场景 迷宫老鼠问题数独解题器骑士巡逻问题N皇后问题…… 3、场景剖析全排列 先用一张图来战术输入输出的过程。 从上图中可以看到全排列 [1, 2, 3] 三个元素在递归的过程中会有很多种结果比如说[1, 1, 2][1, 2, 1], [1, 2, 2]之类的结果。那么当出现重复元素的时候就会出现死路这个时候就应该回退回去并去寻找下一条路活路走出去。这就是回溯算法要解决的问题。 三、贪心算法常见应用 引用leetcode的几道经典题目来强化贪心算法。 1、leetcode 455分发饼干 1题意 这里附上原题链接 假设你是一位很棒的家长想要给你的孩子们一些小饼干。但是每个孩子最多只能给一块饼干。 对每个孩子 i都有一个胃口值 g[i]这是能让孩子们满足胃口的饼干的最小尺寸并且每块饼干 j都有一个尺寸 s[j] 。如果 s[j] g[i]我们可以将这个饼干 j 分配给孩子 i 这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子并输出这个最大数值。 输入输出示例 输入: g [1,2,3], s [1,1]输出: 1解释: 你有三个孩子和两块小饼干3个孩子的胃口值分别是1,2,3。虽然你有两块小饼干由于他们的尺寸都是1你只能让胃口值是1的孩子满足。所以你应该输出1。 2解题思路 既能满足孩子还消耗最少。先将“较小的饼干”分给“胃口较小”的孩子。 3解题步骤 对饼干数组和胃口数组升序降序。遍历饼干数组找到能满足第一个孩子的饼干。然后继续遍历饼干数组找到能满足第二、三、四、……、n个孩子的饼干。 4代码实现 /*** param {number[]} g 孩子胃口* param {number[]} s 饼干尺寸* return {number}*/ let findContentChildren function(g, s) {// 实现升序排序const sortFunc function(a, b){return a-b;}//对g进行升序排序即从小到大排序g.sort(sortFunc);//对s进行升序排序即从小到大排序s.sort(sortFunc);//定义初始值记录饼干能满足多少个孩子let i 0;//对排序后的饼干进行一一遍历并逐一与孩子的胃口比对如果能满足则对i进行1操作s.forEach(n {if(n g[i]){i 1;}});return i; };console.log(findContentChildren([1, 2], [1, 2, 3]));2、leetcode 122买卖股票的最佳时机 1题意 这里附上原题链接 给定一个数组 prices 其中 prices[i] 是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易多次买卖一支股票。 注意你不能同时参与多笔交易你必须在再次购买前出售掉之前的股票。 输入输出示例 输入: prices [7,1,5,3,6,4]输出: 7解释: 在第 2 天股票价格 1的时候买入在第 3 天股票价格 5的时候卖出, 这笔交易所能获得利润 5-1 4 。随后在第 4 天股票价格 3的时候买入在第 5 天股票价格 6的时候卖出, 这笔交易所能获得利润 6-3 3 。 2解题思路 前提上帝视角知道未来的价格。局部最优建好就收见差就不动不做长远打算。 3解题步骤 新建一个变量用来统计总利润。遍历价格数组如果当前价格比昨天高就是昨天买今天卖否则就不交易。遍历结束后返回所有利润之和。 4代码实现 /*** param {number[]} prices* return {number}*/ let maxProfit function(prices) {//新建一个变量用来统计总利润let profit 0;//遍历价格数组for(let i 1; i prices.length; i){//如果当前价格prices[i]比昨天prices[i - 1]高就是昨天买今天卖//否则说明当前天数没买不进行交易if(prices[i] prices[i - 1]){//遍历过程中不断对利润进行相加profit prices[i] - prices[i-1];}}//遍历结束后返回所有利润之和return profit; };console.log(maxProfit([7, 5, 4, 7]));四、回溯算法常见应用 引用leetcode的几道经典题目来强化回溯算法。 1、leetcode 46全排列 1题意 这里附上原题链接 给定一个不含重复数字的数组 nums 返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 输入输出示例 输入: nums [1,2,3]输出: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 2解题思路 要求①所有排列情况②没有重复元素。有出路、有死路。考虑回溯算法。 3解题步骤 用递归模拟出所有情况。遇到包含重复元素的情况就回溯。收集所有到达递归终点的情况并返回。 4代码实现 /*** param {number[]} nums* return {number[][]}*/ let permute function(nums) {// 1.定义一个变量收集所有结果的情况const res [];const backtrack (path) {// 4.递归的重点收集所有满足题目要求的数组if(path.length nums.length){res.push(path);return;}nums.forEach(n {// 3.在把元素放进去时该数组已有此元素那么此路为死路if(path.includes(n)){return;}backtrack(path.concat(n));});};// 2.递归时传入一个数组backtrack([]);return res; };console.log(permute([1, 2, 3]));2、leetcode 78子集 1题意 这里附上原题链接 给你一个整数数组 nums 数组中的元素 互不相同 。返回该数组所有可能的子集幂集。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 输入输出示例 输入: nums [1,2,3]输出: [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 2解题思路 要求①所有子集②没有重复元素。有出路、有死路。考虑使用回溯算法。 3解题步骤 用递归模拟出所有情况。保证接的数字都是后面的数字。收集所有到达递归终点的情况并返回。 4代码实现 /*** param {number[]} nums* return {number[][]}*/var subsets function(nums) {//1.定义一个变量存放结果const res [];const backtrack (path, l, start) {// 4.到达路径终点时push到结果里面if(path.length l){res.push(path);return;}//3.不断遍历数组并将其添加到path中for(let i start; i nums.length; i){backtrack(path.concat(nums[i]), l, i 1);}}//2.子集的长度有可能是0-nums.length不等for(let i 0; i nums.length; i){// 三个参数分别指路径,路径数组的长度,起始的下标backtrack([], i, 0);}return res; };console.log(subsets([1, 2, 3]));五、写在最后 贪心算法和回溯算法在前端的面试和笔试中也是非常经典的常考题。贪心算法相较于其他算法来说比较简单而回溯算法涉及到很多溯回问题逻辑较强建议大家在做题目时如果看不懂的情况下可以选择多调试代码一步一步跟着它的思路多调试几遍慢慢就能深入理解其逻辑了。 贪心算法和回溯算法在前端中的应用就讲到这里啦如有不理解或文章有误欢迎评论区留言或私信我交流~ 关注公众号 星期一研究室 第一时间关注技术干货更多有趣的专栏待你解锁~如果这篇文章对你有用记得点个赞加个关注再走哦~我们下期见

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

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

相关文章

网站域名到期不续费会怎么样怎么制作图片链接

白鹿以前的短视频:时光剪影中的创意火花与成长轨迹 在短视频风起云涌的互联网时代,每一位创作者的早期作品都如同时间胶囊,封存着最初的创意与梦想。提及“白鹿”这一名字,不少人心中会立刻浮现出那个凭借独特风格和不懈努力&…

网站seo诊断湖南岚鸿诊断网上购物系统源码

目录 1、日志输出到文件 2、日志输出到屏幕 3、设置输出等级 4、设置多个日志输出对象 5、日志的配置 6、记录异常 7、设置日志输出样式1、日志输出到文件basicConfig()提供了非常便捷的方式让你配置logging模块并马上开始使用。什么都不配置直接使用默认值在控制台中打log&…

总线的概念以及分类

为什么要用总线: 早期计算机设备少,大多用分散的方法连接实现,不易实现随时增减外部设备,为了更好解决io设备和主机之间连接的灵活性,计算机的结构从分散连接发展为总线连接。 总线的特性 1.机械特性 尺寸,形状,…

A Great Beginning

在2025年才开始写blog似乎已经有点过时了,似乎一切技术都可以询问AI得到,但经验不是。 一些似是而非的问题连描述清楚都很难,需要有一种惊人的直觉才能从线团中捻到那根线头。 而直觉,是AI目前根本无法突破的桎梏。…

邮件系统的未来趋势:技术革新与智能化的未来

随着科技的飞速发展,邮件系统作为信息传递的重要工具,正在经历一场深刻的技术变革。从智能化的邮件管理到更加安全的加密技术,未来的邮件系统将不仅仅是一个简单的通信平台,而是会成为更加高效、智能和安全的信息交…

python-uv入门使用 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

docker volume使用

docker启动时指定volumedocker run -d -p 宿主机端口:容器端口 --mount type=volume,source=volume名称,target=容器内目录 镜像id数据所在目录# linux中的dockerdocker volume默认所在目录: /var/lib/docker/volumes …

网站建设设计计划表人像摄影

文章目录 并查集1.朴素版本2.路径压缩3.按秩合并4.启发式合并5.练习题 并查集 1.朴素版本 1. 并查集解决的是连通块的问题,常见操作有,判断两个元素是否在同一个连通块当中,两个非同一连通块的元素合并到一个连通块当中。 并查集和堆的结构…

如何确定网站栏目中铁建设集团有限公司下属公司

目录 1.说明 2.加密和加签的区别 3.后端加密,解密,加签及验签示例 4.前端加密,解密,加签及验签示例 5.前端加密,后端解密,前端加签,后端验签 6.注意事项 1.说明 RSA算法是一种非对称加密…

做家具商城网站东莞网络推广代理

Redis是一种高性能的键值对存储系统,它支持多种类型的数据结构,如字符串、列表、集合、哈希表、有序集合等。Redis提供了两种不同的持久化机制来确保数据的安全性:RDB(Redis Database)和AOF(Append Only Fi…

吉安做网站的公司晋中公司做网站

数据采集与预处理02 :网络爬虫实战 爬虫基本知识 1 HTTP的理解 URL uniform resource locator. 是统一资源定位符,URI identifier是统一资源标识符。几乎所有的URI都是URL。 URL前部一般可以看到是HTTP还是HTTPS, 这是访问资源需要的协议…

phpcms v9企业网站模板:蓝色电子科技公司网站模板wordpress网页折叠效果

请阅读【嵌入式开发学习必备专栏 】 文章目录 shell 命令 basenamedf 命令 shell 命令 basename 在 shell 脚本中,可以使用 basename 命令来获取文件的基本名称(不带路径的部分)。以下是如何将文件名赋值给变量的示例: file_pat…

网站验收指标网页浏览历史记录在哪

目录 1. 两数之和题目描述做题思路参考代码 49.字母异位词分组题目描述做题思路参考代码 128. 最长连续序列题目描述做题思路参考代码 1. 两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数…

网站制作上海湖南专业竞价优化服务

leetcode 98. 验证二叉搜索树 题目 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是…

详细介绍:基于伪随机数的WPS PIN码逆向原理分析(精灵尘埃/仙尘攻击)

详细介绍:基于伪随机数的WPS PIN码逆向原理分析(精灵尘埃/仙尘攻击)2025-09-23 17:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: aut…

52805 JLINK 端口保护机制硬件保护具体流程分析;

硬件保护(Hardware AP-Protect) 通过写特定值(如 Enabled/0x00)到 UICR.APPROTECT 并复位生效。 一旦启用,只有通过 CTRL-AP 执行 ERASEALL(全片擦除,包括 Flash、UICR、RAM)才能解除保护。 这种保护是持久的,…

构建你的 MCP 能力层:.NET 9 + SK 的系统方案

构建你的 MCP 能力层:.NET 9 + SK 的系统方案环境准备与基线项目(.NET 9 + SK + MCP) 目标:搭建最小可运行的 .NET 控制台,引用 SK 与 MCP,完成一次 MCP Ping 健康检查(Stdio 与 SSE/HTTP 各跑通一次),并为后…

网页设计需要什么seo织梦网站建设步骤

在此整理并记录自己的思考过程,其中不乏有一些尚未成熟或者尚未实现的idea,也有一些idea实现之后没有效果或者正在实现,当然也有部分idea已写成论文正在投稿,都是自己的一些碎碎念念的思考,欢迎交流。 研一上学期 9.…

百度联系电话巩义关键词优化推广

视频扩散模型因其能够生成连贯且高保真的视频而日益受到关注。然而,迭代去噪过程使得这类模型计算密集且耗时,限制了其应用范围。香港中文大学 MMLab、Avolution AI、上海人工智能实验室和商汤科技公司的研究团队提出了AnimateLCM,这是一种允…

网站推广业务展会布置

一、位图 1.1 概念 所谓位图,就是用每一位来存放某种状态,适用于海量数据,数据无重复的场景。通常是用来判断某个数据存不存在的。 数据是否在给定的整形数据中,结果是在或者不在,刚好是两种状态,那么可以…