小白水平理解面试经典题目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

相关文章

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

SpringBoot中4种数据水平分片策略

《SpringBoot中4种数据水平分片策略》数据水平分片作为一种水平扩展策略,通过将数据分散到多个物理节点上,有效解决了存储容量和性能瓶颈问题,下面小编就来和大家分享4种数据分片策略吧... 目录一、前言二、哈希分片2.1 原理2.2 SpringBoot实现2.3 优缺点分析2.4 适用场景三、范围分片

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Docker安装MySQL镜像的详细步骤(适合新手小白)

《Docker安装MySQL镜像的详细步骤(适合新手小白)》本文详细介绍了如何在Ubuntu环境下使用Docker安装MySQL5.7版本,包括从官网拉取镜像、配置MySQL容器、设置权限及内网部署,... 目录前言安装1.访问docker镜像仓库官网2.找到对应的版本,复制右侧的命令即可3.查看镜像4.启

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

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