力扣100题——贪心算法

概述

贪心算法(Greedy Algorithm)是一种在解决问题时,按照某种标准在每一步都选择当前最优解(局部最优解)的算法。它期望通过一系列局部最优解的选择,最终能够得到全局最优解。

贪心算法的核心思想

贪心算法的核心思想是每一步都采取最优选择,即所谓的“贪心选择”。算法会根据某种贪心策略,逐步做出局部最优的选择,并希望通过这些局部最优的选择能够得到最终的全局最优解。

贪心算法的一般步骤

  1. 问题分解:将问题分解为若干个子问题。
  2. 选择贪心策略:为每个子问题选取局部最优解(通常是通过某种评价标准,选择当前最有利的选择)。
  3. 合并子问题的解:将每次的选择累积起来,直到解决完所有子问题,得到最终的全局解。

贪心算法的应用场景

贪心算法适用于那些通过选择局部最优解,最终能够得到全局最优解的问题。一般来说,贪心算法并不总是能找到全局最优解,但在某些特定问题中,它可以得到最优解。常见的贪心算法应用场景包括:

  1. 最小生成树问题:Kruskal 和 Prim 算法都是基于贪心策略的,能够找到加权连通图的最小生成树。
  2. 活动选择问题:用于选择最多的不重叠活动,典型的贪心选择是选择结束时间最早的活动。
  3. 背包问题(贪心版的 0-1 背包问题):按物品的单位价值从高到低进行选择,直到装满背包。

贪心算法的优缺点

优点

  • 简单、高效:由于只关注局部最优,贪心算法通常比较简单,运行速度较快。
  • 直接、可实现性强:贪心算法容易实现,对于某些问题是最佳解决方案。

缺点

  • 不适用于所有问题:贪心算法无法保证在所有问题中都能找到全局最优解,尤其是当局部最优解无法组合成全局最优解时。
  • 需要问题具备“贪心选择性质”:即从局部最优能够推导出全局最优。

刷题

买卖股票的最佳时机

题目

121. 买卖股票的最佳时机 - 力扣(LeetCode)

思路

初始思路:以每一个数组元素为买入点,找出利润的最大值,时间复杂度是O(n)

优化思路:在遍历的过程中,我们始终选择当前最小的买入价格,并计算卖出的最大可能利润。

代码

初始代码

public int maxProfit(int[] prices) {int n = prices.length;int max = 0;for (int i = 0; i < n; i++) {for(int j=i+1;j<n;j++){if(prices[j]>prices[i]){max = Math.max(max,prices[j]-prices[i]);}}}return max;}

优化后的代码

public int maxProfit(int[] prices) {int n = prices.length;int max = 0;int min = prices[0];for (int i = 0; i < n; i++) {if(prices[i] < min)min = prices[i];max = Math.max(max, prices[i] - min);}return max;}

跳跃游戏

题目

55. 跳跃游戏 - 力扣(LeetCode)

思路

  • 初始化一个变量 maxReach,表示当前能够到达的最远位置。
  • 遍历数组的每一个元素,对于每个元素 nums[i],检查是否可以从当前位置到达更远的位置,即 maxReach 是否大于或等于当前下标 i。
  • 在遍历的过程中,不断更新能够到达的最远位置 maxReach 为 i + nums[i]。
  • 如果在遍历过程中,某个位置的 maxReach 大于或等于最后一个下标,则返回 true;否则,如果遍历结束仍未达到最后一个下标,则返回 false。

代码

 public boolean canJump(int[] nums) {int n = nums.length;int max = 0;for(int i = 0; i < n; i++) {if(i>max){return false;}max = Math.max(max, nums[i] + i);if(max>=n-1){return true;}}return false;}

跳跃游戏Ⅱ

题目

45. 跳跃游戏 II - 力扣(LeetCode)

思路

1.定义状态:

  • 维护两个变量 curEnd 和 curFarthest:
  • curEnd 表示当前跳跃范围的最远边界。
  • curFarthest 表示通过当前步能够到达的最远位置。

2.遍历数组:

  • 遍历 nums,在每次遍历时,我们会更新 curMax,表示通过当前跳跃可以到达的最远位置。
  • 当遍历到 curEnd 时,表示当前跳跃已经完成,必须进行下一次跳跃,并更新 max 为 curMax,跳跃次数加1。
  • 最后,如果遍历到了数组的最后一个位置,返回跳跃次数即可。

贪心策略:

  • 在每一次跳跃中,我们尽可能向前跳得最远,这样才能保证在最少的跳跃次数内到达数组末尾。

代码

public int jump(int[] nums) {int n = nums.length;int max = 0;int curMax = 0;int sum =0;for(int i = 0; i < n; i++) {if(i==n-1){break;}curMax = Math.max(curMax, nums[i] + i);if(i==max){max = curMax;sum++;}}return sum;}

划分字母区间

题目

763. 划分字母区间 - 力扣(LeetCode)

思路

  • 用一个last数组,记录每个字母出现的最远位置
  • 遍历数组,使用start和end记录当前划分字符串的开头和结尾
  • 每次不断的更新当前字符串的最远位置
  • 当i和end相等,即代表当前字符串划分结束

代码

public List<Integer> partitionLabels(String s) {List<Integer> res = new ArrayList<Integer>();int[] last = new int[26];for(int i=0;i<s.length();i++){last[s.charAt(i)-'a']=i;}int end = 0,start = 0;for(int i=0;i<s.length();i++){end = Math.max(end, last[s.charAt(i)-'a']);if(i==end){res.add(end-start+1);start=i+1;}}return res;}

结语

每次做贪心都觉得自己智商低

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

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

相关文章

Springboot中自定义监听器

一、监听器模式图 二、监听器三要素 广播器&#xff1a;用来发布事件 事件&#xff1a;需要被传播的消息 监听器&#xff1a;一个对象对一个事件的发生做出反应&#xff0c;这个对象就是事件监听器 三、监听器的实现方式 1、实现自定义事件 自定义事件需要继承ApplicationEv…

HashMap常用方法及底层原理

目录 一、什么是HashMap二、HashMap的链表与红黑树1、数据结构2、链表转为红黑树3、红黑树退化为链表 三、存储&#xff08;put&#xff09;操作四、读取&#xff08;get&#xff09;操作五、扩容&#xff08;resize&#xff09;操作六、HashMap的线程安全与顺序1、线程安全2、…

整型数组按个位值排序

题目描述 给定一个非空数组(列表)&#xff0c;其元素数据类型为整型&#xff0c;请按照数组元素十进制最低位从小到大进行排序&#xff0c;十进制最低位相同的元司 相对位置保持不变。 当数组元素为负值时&#xff0c;十进制最低位等同于去除符号位后对应十进制值最低位。 输…

Facebook的虚拟现实计划:未来社交的全新视角

随着科技的不断进步&#xff0c;虚拟现实&#xff08;VR&#xff09;正逐步成为我们日常生活的一部分。作为全球领先的社交平台&#xff0c;Facebook正在大力投入虚拟现实技术&#xff0c;以重新定义社交互动的方式。本文将深入探讨Facebook的虚拟现实计划&#xff0c;分析其如…

Mycat2原理介绍

Mycat介绍 Mycat原理 Mycat 核心配置 Scheam.xml 逻辑数据库和节点对应关系配置Server.xml mycat的连接配置Rule.xml. 分片规则 自动分片auto-sharding-long&#xff0c;比如0-10000节点1 &#xff0c;10001-20000节点2枚举分片sahrding-bt-intfile ,比如beijing节点1…

[数据集][目标检测]血细胞检测数据集VOC+YOLO格式2757张4类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2757 标注数量(xml文件个数)&#xff1a;2757 标注数量(txt文件个数)&#xff1a;2757 标注…

【数据库】MySQL-基础篇-SQL

专栏文章索引&#xff1a;数据库 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、SQL通用语法 二、SQL分类 三、DDL 1.数据库操作 1.1 查询所有数据库 1.2 查询当前数据库 1.3 创建数据库 1&#xff09;案例&#xff1a; 1.4 删除数据库 1.5 切换数据库…

discuz论坛3.4 截图粘贴图片发帖后显示不正常问题

处理方法 source\function 路径下修改function_discuzcode.php function bbcodeurl($url, $tags) 函数 if(!in_array(strtolower(substr($url, 0, 6)), array(http:/, https:, ftp://, rtsp:/, mms://,data:i) 这一句里增加 data:i 即可 function bbcodeurl($url,…

JAVA基础:抽象类,接口,instanceof,类关系,克隆

1 JDK中的包 JDK JRE 开发工具集&#xff08;javac.exe&#xff09; JRE JVM java类库 JVM java 虚拟机 jdk中自带了许多的包&#xff08;类&#xff09; &#xff0c; 常用的有 java.lang 该包中的类&#xff0c;不需要引用&#xff0c;可以直接使用。 例如&#xff1…

Redis面试题整理

Redis 1、Redis主从集群 1.1、搭建主从集群 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离 1.2、主从同步原理 当主从第一次同步连接或断开重连时&#xff0c;从节点都会发送psync请求&…

即插即用篇 | YOLOv8 引入组装式Transformer模块AssembleFormer | arXiv 2024

本改进已同步到YOLO-Magic框架! 摘要—早期检测和准确诊断可以预测恶性疾病转化的风险,从而增加有效治疗的可能性。轻微的症状和小范围的感染区域是一种不祥的警告,是疾病早期诊断的重中之重。深度学习算法,如卷积神经网络(CNNs),已被用于分割自然或医学对象,显示出有希…

mp3转文字要怎么处理?使用这4个工具就对了

MP3是音频当中比较常用的格式&#xff0c;如果像将其转换成文字内容&#xff0c;一般的语音转文字工具都是可以完成的。但是音频转换成文字的过程中&#xff0c;它的准确率是会受到像口音&#xff0c;语言&#xff0c;环境音等因素的影响的。所以大家如果想将自己的mp3语音转成…

INIC6081量产工具下载,initio6081开卡软件分享

国内固态硬盘常用&#xff0c;且有量产工具流传出来的主控厂商包括慧荣、群联、点序、英韧、得一微、瑞昱、联芸、迈威、国科、华澜微等等。 每个主控需要用各自对应的量产工具&#xff0c;不同的量产工具支持的闪存颗粒也有差异&#xff0c;因此要根据固态硬盘实际的主控型号…

ESXI8.0 vsphere vcenter 多网卡多网段配置

一般来说服务器至少两块网卡&#xff0c;安装esxi后一种方案是利用闲置网卡建立多上传链路&#xff0c;聚合&#xff0c;另一种是配置多网段进行虚拟机隔离&#xff0c;网上也没找到讲的很清楚的&#xff0c;经过多种尝试终于学会&#xff0c;记录分享一下 首先物理交换机的随…

【idea-安装】

JetBrains官⽹ : https://www.jetbrains.com/ 1.下载idea安装包&#xff0c;下载旧一些的版本&#xff0c;避免新版本的不稳定。 下载下来的安装包是exe格式的&#xff0c;直接点击运行。 点击Next 2.选择要下载的位置&#xff0c;点击下一步。 3.选择⽣成快捷⽅式和建⽴⽂件…

Nginx怎么重新编译添加模块

转自 https://www.php.cn/faq/547300.html

linux_终端输入_几个提高效率的超有用配置

ubuntu为例&#xff1a; 1. 按上下键&#xff0c;补全历史指令 只输入一条历史命令的前几个字母&#xff0c;再按PageUp和PageDown键&#xff0c;就可以在以此字母为前缀的历史命令中上下切换。这个功能非常实用&#xff0c;而且比CTRLR使用起来更友善、更方便。遗憾的是&…

fastadmin 文件上传腾讯云

1-安装腾讯云SDK composer require qcloud/cos-sdk-v5 2-腾讯云配置 <?phpnamespace app\common\controller;use Qcloud\Cos\Client; use think\Controller; use think\Db;class Tencent extends Controller {/*** 上传文件* param $config* param $key* return array*/p…

《卷积神经网络 CNN 原理探秘》

CNN基本原理详解 卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;简称CNN&#xff09;&#xff0c;是一种前馈神经网络&#xff0c;人工神经元可以响应周围单元&#xff0c;可以进行大型图像处理。卷积神经网络包括卷积层和池化层。 卷积神经网络是受…

Visual Studio 设置文件默认编码格式、行尾符等

文章目录 1.命令方式2.EditorConfig配置 1.命令方式 2.EditorConfig配置 微软官方文档 使用EditorConfig方式配置&#xff0c;无需Visual Studio软件自带对EditorConfig的支持&#xff0c;无需插件 将下面.editorconfig文件放在项目根目录下 root true # 所在目录是根目录…