您的位置:首页 > 其它

LeetCode题库解答与分析——#121. 买卖股票的最佳时机BestTimeToBuyAndSellStock

2018-03-24 13:19 615 查看
假设你有一个数组,其中第 i 个元素是一支给定股票第 i 天的价格。如果您只能完成最多一笔交易(即买入和卖出一股股票),则设计一个算法来找到最大的利润。示例 1:输入: [7, 1, 5, 3, 6, 4]
输出: 5

最大利润 = 6-1 = 5(不是 7-1 = 6, 因为卖出价格需要大于买入价格) 示例 2:输入: [7, 6, 4, 3, 1]
输出: 0

在这种情况下, 没有交易完成, 即最大利润为 0。
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.Example 1:
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)Example 2:
Input: [7, 6, 4, 3, 1]
Output: 0

In this case, no transaction is done, i.e. max profit = 0.
个人思路:
对每两个数值相减,最后得到最大值
代码(JavaScript):/**
* @param {number[]} prices
* @return {number}
*/
var maxProfit = function(prices) {
var max=0;
for(var i=1;i<prices.length;i++){
for(var j=0;j<i;j++){
max=Math.max(prices[i]-prices[j],max);
}
}
return max;
};进阶思路:
对每两个相邻相减,如果小于零则归零,大于零则记录为当前最大值,如果大于最大值则取代之
代码(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]);
maxSoFar = Math.max(maxCur, maxSoFar);
}
return maxSoFar;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐