题目描述
假设你有一个数组,其中第 i 个元素是股票在第i 天的价格。
你有一次买入和卖出的机会。(只有买入了股票以后才能卖出)。请你设计一个算法来计算可以获得的最大收益。
示例 1:
输入: [8,1,5,3,7,4]
输出: 6
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 7)的时候卖出,最大利润 = 7-1 = 5 。
注意:利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
示例 2:
输入: [9,6,5,2,1]
输出: 0
解释: 在这种情况下, 没有交易完成, 所以最大利润为0
思路:从头遍历数组,找当前最小值,每当遇到更大数值,比较差值与原先最大获利,遇到更小值,就更换min。
分析:时间复杂度O(n),空间复杂度O(1)。运行效率很高
public class MaxProfit {
public static void main(String[] args) {
int[] nums = {2,7,4,8,1,3};
}
/**
*
* @param prices int整型一维数组
* @return int整型
*/
public int maxProfit (int[] prices) {
if(null == prices || prices.length == 1){
return 0;
}
int min = prices[0];
int maxPrice = 0; // 最大利润
for(int i=0; i<prices.length; i++){
if(min < prices[i]){
maxPrice = prices[i] - min > maxPrice ? prices[i] - min : maxPrice;
}else{
min = prices[i];
}
}
return maxPrice;
}
}