当前位置:网站首页>Leetcode 笔记 121. 买卖股票的最佳时机
Leetcode 笔记 121. 买卖股票的最佳时机
2022-07-26 00:24:00 【Lyrig~】
题目描述
给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。
你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。
示例 1:
输入:[7,1,5,3,6,4]
输出:5
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:
输入:prices = [7,6,4,3,1]
输出:0
解释:在这种情况下, 没有交易完成, 所以最大利润为 0。
提示:
1 <= prices.length <= 105
0 <= prices[i] <= 104
思路
第一个想到的暴力求解,这个不用说,就是把所有可能情况都算一遍,这个方法的好处是内存占用小,毕竟不需要存什么,但是其时间复杂度为 O ( n 2 ) \mathcal{O}(n^2) O(n2),这是不能接受的。
第二个思路,则是通过分析,最大收益的本质,是 a r g m a x { m a x c o s t i − m i n c o s t i } argmax\{maxcost_i - mincost_i\} argmax{ maxcosti−mincosti}, 即第1 ~ N天内的最大花费 - 第1~i天内的最小花费,而这两个值,只需要一次历遍就可以解决,因此这个方法的时间复杂度为 O ( n ) \mathcal{O}(n) O(n)这就很好了。
代码
class Solution {
public:
int maxProfit(vector<int>& prices) {
int maxp[100005] {
};
int minp[100005] {
};
minp[0] = prices[0];
maxp[prices.size() - 1] = prices[prices.size() - 1];
int ans = 0;
for(int i = 1; i < prices.size(); ++i)
{
minp[i] = min(minp[i - 1], prices[i]);
}
ans = max(0, maxp[prices.size() - 1] - minp[prices.size() - 1]);
for(int j = prices.size() - 2; j >= 0; -- j)
{
maxp[j] = max(maxp[j + 1], prices[j]);
ans = max(ans, maxp[j] - minp[j]);
}
return ans;
}
};
边栏推荐
- Flask send verification code logic
- 基于MFFMB的电商评论文本分类研究
- Study on bovine serum protein modified phenolic acids and alkaloids small molecules / coupled microspheres protein / bovine erythrocyte SOD
- 融合聚类信息的技术主题图可视化方法研究
- 【计算一个字符串和另一个字符串相等的次数】
- MySQL - Multi version concurrency control (mvcc)
- Redis夺命十二问,你能扛到第几问?
- 关于“DBDnet: A Deep Boosting Strategy for ImageDenoising“一文理解
- markdown写作平台
- 对“DOF: A Demand-oriented Framework for ImageDenoising“的理解
猜你喜欢

YOLOV3

数据流通交易场景下数据质量综合管理体系与技术框架研究

Modeling and simulation analysis of online medical crowdfunding communication based on SEIR model

HNOI2012矿场搭建

测试7年,面试华为最后面议要薪1万,HR说我不尊重华为,他们没有那么低薪资的岗位~

GOM和GEE引擎黑屏不显示界面,装备地图怪物的解决方法

Tarjan 求强连通分量 O(n+m) ,缩点
![[redis] ② redis general command; Why is redis so fast?; Redis data type](/img/72/aaa90d5411b8b20b15a7f87b98bd27.png)
[redis] ② redis general command; Why is redis so fast?; Redis data type

MySQL - Multi version concurrency control (mvcc)

Bond network card mode configuration
随机推荐
Binary representation -- power of 2
Verilog语法基础HDL Bits训练 05
基于数据要素流通视角的数据溯源研究进展
试除法--3的幂
[英雄星球七月集训LeetCode解题日报] 第25日 树状数组
Applet page generation link sent by SMS
FreeRTOS personal notes - semaphore
Four characteristics and isolation level of MySQL transactions
什么是 Web3 游戏?
Find the single dog (Li Kou 260)
LCA 三种姿势(倍增,Tarjan+并查集,树链剖分)
[contents] mqtt, nodejs projects
Preparation of bovine serum albumin modified by low molecular weight protamine lmwp/peg-1900 on the surface of albumin nanoparticles
【Redis】② Redis通用命令;Redis 为什么这么快?;Redis 的数据类型
Installation and configuration of VMware esxi7.0
合肥提前批
Markdown writing platform
测试7年,面试华为最后面议要薪1万,HR说我不尊重华为,他们没有那么低薪资的岗位~
Comparing the seven distributed transaction schemes, I prefer Alibaba's open source Seata (principle + Practice)
Understanding of "dbdnet: a deep boosting strategy for imagedenoising"