每日一题-贪心算法

server/2024/9/22 18:22:47/

目录

前言

买入股票的最佳时机(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.ppmy.cn/server/22587.html

相关文章

Java基础--单元测试

JUnit是Java中最流行的开源单元测试框架&#xff0c;用于编写和运行可重复的、自动化的单元测试。JUnit极大地简化了测试用例的编写和组织&#xff0c;提供了丰富的断言方法、测试运行控制、测试结果报告等功能&#xff0c;是遵循测试驱动开发&#xff08;TDD&#xff09;和持续…

Vue 组件单元测试深度探索:细致解析与实战范例大全

Vue.js作为一款广受欢迎的前端框架&#xff0c;以其声明式的数据绑定、组件化开发和灵活的生态系统赢得了广大开发者的心。然而&#xff0c;随着项目规模的增长&#xff0c;确保组件的稳定性和可靠性变得愈发关键。单元测试作为软件质量的守护神&#xff0c;为Vue组件的开发过程…

基于Flask的岗位就业可视化系统(一)

前言 本项目综合了基本数据分析的流程&#xff0c;包括数据采集&#xff08;爬虫&#xff09;、数据清洗、数据存储、数据前后端可视化等 推荐阅读顺序为&#xff1a;数据采集——>数据清洗——>数据库存储——>基于Flask的前后端交互&#xff0c;有问题的话可以留言…

Android 在attrs.xml添加属性时出现 Found item Attr/****** more than one time

Android 在attrs.xml添加属性时出现 Found item Attr/****** more than one time 问题描述解决办法方式一方式二 小结 问题描述 在Android应用开发过程中&#xff0c;经常需要自定义控件&#xff0c;并且定义控件的属性&#xff0c;方便灵活的修改控件的显示样式&#xff0c;提…

【数据结构】单链表

单链表 文章目录 单链表定义单链表的优缺点用代码定义单链表初始化单链表不带头结点的单链表带头结点的单链表 单链表的插入按位序插入&#xff08;带头结点&#xff09;指定结点的后插操作指定结点的前插操作 单链表的删除按位序删除&#xff08;带头节点&#xff09;删除指定…

[NeurIPS-23] GOHA: Generalizable One-shot 3D Neural Head Avatar

[pdf | proj | code] 本文提出一种基于单图的可驱动虚拟人像重建框架。基于3DMM给粗重建、驱动结果&#xff0c;基于神经辐射场给细粒度平滑结果。 方法 给定源图片I_s和目标图片I_t&#xff0c;希望生成图片I_o具有源图片ID和目标图片表情位姿。本文提出三个分支&#xff1a;…

C语言-atoi和atof函数的使用

人生应该树立目标&#xff0c;否则你的精力会白白浪费。&#x1f493;&#x1f493;&#x1f493; 目录 •&#x1f319;知识回顾 &#x1f34b;知识点一&#xff1a;atoi函数的使用和实现 • &#x1f330;1.函数介绍 • &#x1f330;2.代码演示 • &#x1f330;3.atoi函数的…

002 springboot redis 防止表单重复提交

文章目录 RedisConfig.javaWebConfiguration.javaAutoIdempotentTokenController.javaMyOrderController.javaMyOrder.javaAutoIdempotentInterceptor.javaAutoIdempotentIdempotentTokenService.javaIdempotentTokenServiceImpl.javaSpringbootRedisDemoApplication.javaappli…