今天没有什么难度,求最大差值。但是解题的方法有很多,不仅仅文中的两种。
一、题目
给定一个数组,它的第 i
个元素是一支给定股票第 i
天的价格。
如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票
示例 1:
1 |
|
示例 2:
1 |
|
二、思路
暴力解决法
两遍 for
循环,找出两个数字之间的最大差值,即最大利润。
内层 for
循环中的数组下标总是在外层数组下标之后。也就是拿后面的卖出价格减去前面的买入价格,求出最大利润。
时间复杂度: O(n^2) 空间复杂度: O(1)
一次遍历
遍历一遍数组。
找到第 i
天买入股票的最低价格,在找最低价格的同时求出最大利润。有人可能举出 [6, 2, 5, 1, 3]
的例子:你找到了最低价格为 1 ,但是你的利润为 3-1=2
不是最大的啊。
首先,这里的 i
, 是指的是从数组的第一个元素开始找,当找到第 i
天的股票价格在 [i, i+n]
的区间中最低,则求出最大利润 maxprofit
。
如果,在第 i + a
天的股票价格比第 i
天的价格小,从而改变区间。在第 [i+a, i+a+n]
的区间中求出 maxprofit
。并且与之前的利润作对比,返回最大利润。
时间复杂度: O(n) 空间复杂度: O(1)
三、代码实现
暴力解决
1 |
|
一次遍历
C
1 |
|
C++
1 |
|