Leetcode算法学习日志-121 Best Time to Buy and Sell Stock
2017-08-13 10:47
465 查看
Leetcode 121 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 dayi.
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.
题意分析
本题是一个简单的求最优解问题,只能买卖一次股票,求最大收益,当卖的时候的价格比买的时候高,收益为0。解法分析
本题采用动态规划方法求解。如果用暴力方法,显而易见算法复杂度为O(n^2),所以一般用动态规划该方法复杂度变为o(n),只有一个for循环,也就是通过遍历一次原序列就能得到解。首先分析最优子结构,令从左开始的一个子序列中最小元素为a,下一个元素为b,如果b比a小,则算上b后的序列的最小元素就是b,否则仍是a;如果b比a大,则求其差值,与Pro比较,如果差值大于pro,则修改pro的值,否则pro的值不变。这是一个简单的自底向上的动态规划问题。C++代码如下:class Solution {
public:
int maxProfit(vector<int>& prices) {
int n=prices.size();
if(n==0||n==1)
return 0;
int pro=0,min=prices[0],i,temp;
for(i=1;i<=n-1;i++){
if(prices[i]>min){
temp=prices[i]-min;
if(temp>pro)
pro=temp;
}
else
min=prices[i];
}
return pro;
}
};由于只有一个for循环,所以复杂度为O(n),注意对空输入和只有一个元素的输入的处理,都应输出0。
相关文章推荐
- Leetcode算法学习日志-122 Best Time to Buy and Sell Stock II
- 【LeetCode-面试算法经典-Java实现】【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 数组
- LeetCode 121-123 Best Time to Buy and Sell Stock I II III
- leetcode(121). Best Time to Buy and Sell Stock
- LeetCode 121 Best Time to Buy and Sell Stock
- leetcode(121)(122)(123)(188) Best Time to Buy and Sell Stock I/II/III/IV JAVA代码
- LeetCode 121. Best Time to Buy and Sell Stock (买卖股票的最好时机)
- [LeetCode] 121 - Best Time to Buy and Sell Stock
- LeetCode121 Best Time to Buy and Sell Stock
- leetcode_question_121 Best Time to Buy and Sell Stock
- 【12月19日】LeetCode刷题日志(三):Best Time to Buy and Sell Stock with Transaction Fee
- LeetCode:121. Best Time to Buy and Sell Stock
- LeetCode 121 Best Time to Buy and Sell Stock题解
- Best Time to Buy and Sell Stock - LeetCode 121
- [LeetCode]121 Best Time to Buy and Sell Stock
- LeetCode题库解答与分析——#121. 买卖股票的最佳时机BestTimeToBuyAndSellStock
- leetcode--121. Best Time to Buy and Sell Stock