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;
}
输出: 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;
}
相关文章推荐
- Leetcode121 Best Time to Buy and Sell Stock(买卖股票的最佳时机1)
- [Leetcode] Best time to buy and sell stock 买卖股票的最佳时机
- 【LeetCode-面试算法经典-Java实现】【121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)】
- [Leetcode] Best time to buy and sell stock ii 买卖股票的最佳时机
- [Leetcode] Best time to buy and sell stock iii 买卖股票的最佳时机
- [Java语言] [Leetcode] Best Time to Buy and Sell Stock 买卖股票的最佳时机
- LeetCode-121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)
- LeetCode 121. Best Time to Buy and Sell Stock (买卖股票的最好时机)
- leetcode 121.Best Time to Buy and Sell Stock 股票买卖最佳时间
- 【LeetCode-面试算法经典-Java实现】【121-Best Time to Buy and Sell Stock(最佳买卖股票的时间)】
- [LeetCode 121] - 买入与卖出股票的最佳时机(Best Time to Buy and Sell Stock)
- [LeetCode] 121. Best Time to Buy and Sell Stock 买卖股票的最佳时间
- LintCode--best-time-to-buy-and-sell-stock-ii(买卖股票的最佳时机 II)
- [leetcode 121] Best Time to Buy and Sell Stock---只能买卖股票一次的最大收益
- [LeetCode] Best Time to Buy and Sell Stock IV 买卖股票的最佳时间之四
- 【LintCode】 Best Time to Buy and Sell Stock II 买卖股票的最佳时机 II
- [LeetCode 122] - 买入与卖出股票的最佳时机II(Best Time to Buy and Sell Stock II)
- LeetCode——Best Time to Buy and Sell Stock I (股票买卖时机问题1)
- 【LintCode】 Best Time to Buy and Sell Stock III 买卖股票的最佳时机 III
- [LeetCode] 123. Best Time to Buy and Sell Stock III 买卖股票的最佳时间 III