小白水平理解面试经典题目LeetCode 121 Best Time to Buy and Sell Stock

本文主要是介绍小白水平理解面试经典题目LeetCode 121 Best Time to Buy and Sell Stock,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

121 Best Time to Buy and Sell Stock (买卖股票的最佳时机)

你好,2024年的第一个月,又是秋风萧瑟天气凉,草木摇落露为霜。.。。在这个特殊的时代,作为我们普通的一个打工人,我们用这道题,开启对这个不符合经济增长规律的股市反抗一把。

题目描述

有这样一个数组 prices ,其中 prices[i] 是给定股票在 ith天的价格。

我希望通过选择某一天购买一只股票并选择未来的另一天出售该股票来最大化的利润。

返回从本次交易中获得的最大利润。如果你无法获得任何利润,返回 0 。

在这里插入图片描述
在这里插入图片描述

这里我个人小白理解分析:

这道题我上来一看就感觉,股市要是能预测成这样,那大家不全都赚到钱了,有些扯。但谁叫面试官喜欢这道题呢,那我还是继续看题吧,毕竟,万一通过刷明白这道题,有钱请白月光吃麻辣烫了呢。
在这里插入图片描述
这里我们那这个数组来进行理解 [7,1,5,3,6,4]

7 是我们看到的最便宜的开始价格,我们是无法在第一天出售,因此 maxProfit 为 0;

1 现在是我们见过的最便宜的价格。现在出售会我们肯定就亏了,所以我们无法更新 maxProfit;

5 比1贵,但如果我们现在出售,我们得到的最大利润为 4!最好保存起来供以后使用;

3 比1也贵,如果我们出售,我们只获得的利润为2,那么我们不需要在这里做改变;

6 是比1更贵,但如果我们在这里出售,我们会将 maxProfit 增加到 5,使其成为最佳回报利润。

4 比1也贵,如果我们出售,我们只获得的利润为3,比6的时候去卖获得的利润更少,那么我们在这里也不做改变;

解题过程

上来咱就是主打一个快,别让面试官久等了。另外,我还要去请白月光吃饭呢。

public static int maxProfit2(int[] prices){// 最大利润int maxProfit = 0;// 遍历所有可能的买入和卖出时机for (int i = 0; i < prices.length; i++) {for (int j = i + 1; j < prices.length; j++) {// 计算利润int profit = prices[j] - prices[i];// 更新最大利润if (profit > maxProfit) {maxProfit = profit;}}}return maxProfit;}

在这里插入图片描述
小明:OK,完事儿,等着面试官来表扬自己吧。他肯定会说:小子,你是个好手!工位都给你准备好了,工资你说了算。

面试官:嗯,你这个要是nums2 给了十万个数是不是会影响性能?

小明OS:今年这个找工市场,人言洛阳花似锦,偏我来时不逢春。。。怎的,技能要求突然涨了,不是做出来就行?

好吧,逼我拿出压箱底的东西是吧。的确这个算法是偏慢。

话不多说,拿动态方程说话:

dp[i] = max(dp[i - 1], prices[i] - min(prices[0:i]))

其中,

  • dp[i] 表示在第 i 天卖出股票,最大利润
  • prices[i] 表示第 i 天的股票价格
  • min(prices[0:i]) 表示第 0 天到第 i 天中最小的股票价格

小白的理解过程:

动态方程的含义是:在第 i 天卖出股票,最大利润可以从以下两种情况中取最大值:

在第 i - 1 天卖出股票,最大利润
在第 i 天买入股票,然后在第 i 天卖出股票,利润为 prices[i] - min(prices[0:i])

public static int maxProfit(int[] prices) {// 最大利润int[] dp = new int[prices.length];// 初始化dp[0] = 0;// 计算 dp[i]for (int i = 1; i < prices.length; i++) {// 计算在第 i 天卖出股票,最大利润dp[i] = Math.max(dp[i - 1], prices[i] - min(prices[0:i]));}// 返回最大利润return dp[prices.length - 1];}private static int min(int[] prices) {int minPrice = prices[0];for (int price : prices) {if (price < minPrice) {minPrice = price;}}return minPrice;}

终于,看到了面试官满意的点头,OK,进入下一面!

在这里插入图片描述
编码道路漫漫,只要先看脚下的路,徐徐前进即可。

这篇关于小白水平理解面试经典题目LeetCode 121 Best Time to Buy and Sell Stock的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/625306

相关文章

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危