1. 题目分析
这道题,我们要用最简单,最节约内存的方式来做,我们可以用动态规划。
- 基本思想:
- 思考一下,当我们遍历到第n个元素的时候,现在的最高利润就只有两个情况,第一种就是n - 1的利润,第二种就是n - min(n - 1),谁更大,就用谁。、
动态规划 前i天的最大收益 = max{前i-1天的最大收益,第i天的价格-前i-1天中的最小价格}
- 设置两个变量,一个用来存储前n项的最小值,一个用来存储前n项的最高利润
2. 代码实现
2.1. Python代码
class Solution(object):
def maxProfit(self, prices):
"""
:type prices: List[int]
:rtype: int
"""
_min = prices[0]
_max = 0
for i in prices:
_min = min(_min,i)
_max = max(_max,i-_min)
return _max
2.2. Java代码
class Solution {
public int maxProfit(int[] prices) {
int min = prices[0];
int max = 0;
for(int i = 0;i < prices.length;i++){
min = Math.min(prices[i], min);
max = Math.max(max, prices[i] - min);
}
return max;
}
}