每日一题-贪心算法

目录

前言

买入股票的最佳时机(1)

买入股票的最好时机(2)

前言

当你踏上贪心算法的旅程,仿佛置身于一场智慧的盛宴,每一步都是对问题解决方案的审慎选择,每一次决策都是对最优解的向往。贪心算法以其简洁高效的特性,被广泛运用于解决各类优化问题,无论是在算法竞赛的舞台上,还是在实际工程的应用中,都展现着其独特的魅力。

在这篇博客中,我将带领大家深入探索贪心算法的精髓,从经典问题到实际案例,一一呈现其妙不可言喻之处。透过习题讲解,我们将一同揭开贪心算法的神秘面纱,探寻其中的逻辑与技巧,希望能够为各位读者提供一份清晰的指南,助力你们在算法的海洋中航行无忧。

无论是初学者抑或是算法高手,都能从中收获不少启发与收获。让我们一起启程,探索贪心算法的奥秘,开启算法之旅的新篇章!

买入股票的最佳时机(1)

. - 力扣(LeetCode)

我们可以按照以卖的点的位置进行思考,以 i 位置进行出售,就只需要求 0 ~ i - 1 位置内买入的最小值即可,然后把每个位置的最大值求出来,即可通过O(n)的复杂度解决这道问题。   

 

代码实现,我把上面的思路分析都用代码注释标注了

class Solution {public int maxProfit(int[] arr) {int min = Integer.MAX_VALUE;// 记录i - 1位置的最小值int max = Integer.MIN_VALUE;// 卖出股票会得到的最大利润for (int i = 0; i < arr.length - 1; i++) {min = Math.min(min, arr[i]);// 计算前面的最小值max = Math.max(max, arr[i + 1] - min);// 更新最大值}return Math.max(max, 0);}
}

买入股票的最好时机(2)

. - 力扣(LeetCode)

 贪心算法的思想是在每一步都选择当前状态下的最优解,以期望最终获得全局的最优解。对于这个问题,我们可以通过找到股票价格的递增区间,并在每个递增区间内进行买入和卖出操作,以获得最大利润。

这一题的解决方案就和下图一样画出增长区间,求出所有增长区间的值之和,也就是最终答案。

  1. 遍历股票价格数组,从第二天开始。
  2. 如果当前股票价格比前一天高,说明可以在前一天买入,当前天卖出,获得利润。
  3. 将每次获得的利润累加起来,得到最终的总利润。

class Solution {public int maxProfit(int[] prices) {int result = 0;for(int i = 1;i < prices.length;i++){//从第二个位置开始if(prices[i] > prices[i - 1]){
//通过求每一段增长区间的值来求最终增长区间的值(每个增长区间我都要)result += prices[i] - prices[i - 1];}}return result;}
}

因为买入股票最好时机3和4都是动态规划实现的,我将在下一篇进行讲解 

总结

在这篇博客中,我们将深入探讨贪心算法的精髓,从经典问题到实际案例,一一呈现其独特的魅力。通过习题讲解,我们将揭开贪心算法的神秘面纱,探寻其中的逻辑与技巧,为读者提供清晰的指南。无论是初学者还是算法高手,都能从中获得启发与收获。让我们一起启程,探索贪心算法的奥秘,开启算法之旅的新篇章!此外祝大家周末愉快。

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

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

相关文章

【golang学习之旅】Go的 switch 分支语句

系列文章 【golang学习之旅】报错&#xff1a;a declared but not used 【golang学习之旅】Go 的基本数据类型 【golang学习之旅】Go 的循环结构 【golang学习之旅】Go里面 if 条件判断语句 目录 系列文章switch 分支fallthrough 关键字无条件 switch switch 分支 有些时候需…

esp32-cam 1. 出厂固件编译与测试

0. 环境 - ubuntu18 - esp32-cam - usb转ttl ch340 硬件连接 esp32-camch340板子U0RTXDU0TRXDGNDGND5V5V 1. 安装依赖 sudo apt-get install vim sudo apt install git sudo apt-get install git wget flex bison gperf python python-pip python-setuptools python-serial p…

Qt 信号槽中信号重名解决办法

1、类似与Qt4中的写法&#xff1a; 2、函数指针 3、泛型 connect(ui->combox, QOverload<int>::of(&QCombox::currentIndexChanged), this ,&mainwindow::onindexchange);

LLM应用:让大模型prompt总结生成Mermaid流程图

生成内容、总结文章让大模型Mermaid流程图展示&#xff1a; mermaid 美人鱼, 是一个类似 markdown&#xff0c;用文本语法来描述文档图形(流程图、 时序图、甘特图)的工具&#xff0c;您可以在文档中嵌入一段 mermaid 文本来生成 SVG 形式的图形 Prompt 示例&#xff1a;用横向…

33.Docker安装

Docker由CE和EE两个版本&#xff0c;CE是社区版免费&#xff0c;EE企业版收费。 Docker CE支持64位版本centos7,内核版本不低于3.10&#xff0c;Centos7满足最低内核要求&#xff0c;所以在centos7安装docker。 前期准备工作 使用虚拟机上安装Centos7系统&#xff0c;再安装…

001_Langchain

LangChain LangChain 是一个开源框架,旨在帮助开发者使用大型语言模型(LLMs)和聊天模型构建端到端的应用程序。它提供了一套工具、组件和接口,以简化创建由这些模型支持的应用程序的过程。LangChain 的核心概念包括组件(Components)、链(Chains)、模型输入/输出(Mode…

赶紧收藏!2024 年最常见 100道 Java 基础面试题(二十五)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 100道 Java 基础面试题&#xff08;二十四&#xff09;-CSDN博客 四十九、什么是死锁&#xff1f; 死锁是计算机科学中一个重要的概念&#xff0c;尤其在并发编程和多线程环境中。在Java中&#xff0c;死锁同样是一…

《汇编语言》- 读书笔记 - 附注

《汇编语言》- 读书笔记 - 附注 附注1&#xff1a;Intel 系列微处理器的3种工作模式1. 实模式2. 保护模式保护模式 与 实模式 的主要区别寻址能力内存保护特权级别任务管理和虚拟内存 为何需要保护模式访问受保护资源 3. 虚拟 8086 模式4. 长模式&#xff08;Long Mode&#xf…

R语言学习—6—多元相关与回归分析

1、引子 xc(171,175,159,155,152,158,154,164,168,166,159,164) #身高 yc(57,64,41,38,35,44,41,51,57,49,47,46) #体重 par(marc(5,4,2,1)) #设定图距离画布边缘的距离&#xff1a;下5&#xff0c;左4&#xff0c;上2&#xff0c;右1 plot(x,y) 2、相关…

【C语言实现贪吃蛇】(内含源码)

前言&#xff1a;首先在实现贪吃蛇小游戏之前&#xff0c;我们要先了解Win32 API的有关知识 1.Win32 API Windows这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外&#xff0c;它同时也是一个很大的服务中心&#xff0c;调佣这个中心的各种服务&#xff08;每一…

conda的一些问题

我是windows&#xff0c;conda下载的包下载到了c盘的.conda文件夹下&#xff0c;这是为什么&#xff1f; Conda 在 Windows 系统上默认会在用户的主目录下创建一个 .conda 文件夹&#xff0c;用来存储一些临时文件和包的缓存。这个路径是由 Conda 的默认配置决定的&#xff0c…

电话号码的字母组合 【C++】【力扣刷题】

解题思路&#xff1a; 以第一个为例,digits “23”&#xff0c;表明从电话号码的按键中选取2和3这两个字符&#xff0c;然后去寻找它们各自所对应的字母&#xff0c;这里每一个数字字符所对应的字母的不同&#xff0c;0对应的是空字符&#xff0c;而1的话题目中讲到是不对应任…

【webrtc】MessageHandler 6: 基于线程的消息处理:StunRequest实现包发送和超时重传

G:\CDN\rtcCli\m98\src\p2p\base\stun_request.cc使用OnMessage 实现包的发送和包的超时重传StunRequest 一个StunRequest 代表是一个独立的请求的发送STUN消息 要不是发送前构造好的,要不就是按照需要构建的使用StunRequestManager: 每一个STUNRequest 携带一个交互id 写入m…

代码审查工具Gerrit简介

Gerrit是一个开源的代码审查和项目管理工具&#xff0c;特别为Git版本控制系统设计。它提供了一个基于Web的界面&#xff0c;使得开发者能够提交他们的更改供其他人审查&#xff0c;之后这些更改可以被接受并合并到项目中。Gerrit极大地促进了团队协作和代码质量的提升&#xf…

CUDA和显卡驱动

1.安装显卡驱动 https://www.nvidia.com/download/index.aspx?langen-us 由于我的显卡是RTX4060&#xff0c;因此先选择RTX40系列&#xff0c;然后选择RTX4060&#xff0c;进行安装 2.查看显卡对应的CUDA CUDA安装地址&#xff1a;https://developer.nvidia.com/cuda-toolk…

一文带你了解MySQL的索引分类

文章目录 ☃️分类☃️演示图☃️思考☃️总结 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后端开…

【YOLO 系列】基于YOLO V8的27类蔬菜水果检测识别系统【python源码+Pyqt5界面+数据集+训练代码】

前言&#xff1a; 蔬菜水果的种类繁多&#xff0c;是人们日常生活中不可或缺的一部分。然而&#xff0c;在蔬菜水果的生产、销售和储存过程中&#xff0c;往往面临着诸多挑战&#xff0c;如品质检测、分类等问题。为了提高蔬菜水果行业的生产效率和产品质量&#xff0c;我们提…

【redis】redix在Linux下的环境配置和redis的全局命令

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

学习Rust的第25天:Rust中的mkdir

为了实现重建 GNU 核心实用程序的崇高目标&#xff0c;今天的工具是 mkdir 我们用来在 Linux 上创建目录的工具。让我们开始吧。 Pseudo Code 伪代码 args command_line_arguments remove the first element of the args vector if args.length 0 {print error_message } els…

STM32学习和实践笔记(24):PWM输出实验:呼吸灯

本实验所要实现的功能是&#xff1a;通过TIM3的CH1输出一个PWM信号&#xff0c;控制D7指示 灯由暗变亮&#xff0c;再由亮变暗&#xff0c;类似于人的呼吸。程序框架如下&#xff1a; &#xff08;1&#xff09;初始化PC6管脚为PWM输出功能 &#xff08;2&#xff09;PWM输出…