您的位置:首页 > 其它

Best Time to Buy and Sell Stock 【最佳买卖股票的时间】【容易】

2017-07-28 14:03 507 查看

一、题目

英文:Best Time to Buy and Sell Stock

中文:最佳买卖股票的时间

二、内容要求

英文:

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天的售价,求出只做一次交易(一次买入和卖出)能得到的最大收益。

三、示例

示例一

Input: [7, 1, 5, 3, 6, 4]
Output: 5

max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)


示例二

Input: [7, 6, 4, 3, 1]
Output: 0

In this case, no transaction is done, i.e. max profit = 0.


四、代码

1.java代码

public int maxProfit(int[] prices) {
int maxCur = 0, maxSoFar = 0;//记录当前的差值(前后两个数)  和  曾经出现过的最大差值
for(int i = 1; i < prices.length; i++) {
maxCur = Math.max(0, maxCur += prices[i] - prices[i-1]);//先求前后之间的差值,然后通过累计差值得到maxCur
maxSoFar = Math.max(maxCur, maxSoFar);//利用maxSoFar保存曾经最大的差值。从曾经和现在的取出其中最大的值
}
return maxSoFar;//返回最大的差值
}
//其中,*maxCur = current maximum value  *maxSoFar = maximum value found so far


1.2另一种易理解形式

public int maxProfit(int[] prices) {

if (prices == null || prices.length < 1) {
return 0;
}
int min = prices[0];
int profit = 0;
907d

// 第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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐