【121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)】
【LeetCode-面试算法经典-Java实现】【全部题目文件夹索引】
原题
Say you have an array for which the ith element is the price of a given stock on day i.
If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.
题目大意
给一个数组prices[],prices[i]代表股票在第i天的售价,求出仅仅做一次交易(一次买入和卖出)能得到的最大收益。
解题思路
仅仅须要找出最大的差值就可以。即 max(prices[j] – prices[i]) ,i < j。一次遍历就可以,在遍历的时间用遍历low记录 prices[o….i] 中的最小值,就是当前为止的最低售价,时间复杂度为 O(n)。
代码实现
算法实现类
public class Solution {
public int maxProfit(int[] prices) {
if (prices == null || prices.length < 1) {
return 0;
}
int min = prices[0];
int profit = 0;
// 第i天的价格能够看作是买入价也能够看作是卖出价
for (int i = 1; i < prices.length; i++) {
// 找到更低的买入价
if (min > prices[i]) {
// 更新买入价
min = prices[i];
}
// 当天的价格不低于买入价
else {
// 假设当天买出的价格比之前卖出的价格高
if (profit < prices[i] - min) {
// 更新卖出价
profit = prices[i] - min;
}
}
}
return profit;
}
}
评測结果
点击图片。鼠标不释放,拖动一段位置,释放后在新的窗体中查看完整图片。