您的位置:首页 > 其它

LeetCode - 121/122 - Best Time to Buy and Sell Stock

2017-07-16 09:51 351 查看
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 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.


思路:遍历时记录最小值,用每个数减去最小值更新答案最大值。时间复杂度O(n),空间复杂度O(1)

class Solution {
public:
int maxProfit(vector<int>& prices) {
int ans = 0;
int mmin = INT_MAX;
for (int i = 0; i < prices.size(); ++i) {
mmin = min(mmin, prices[i]);
ans = max(ans, prices[i] - mmin);
}
return ans;
}
};


122. Best Time to Buy and Sell Stock II

Say you have an array for which the ith element is the price of a given stock on day i.

Design an algorithm to find the maximum profit. You may complete as many transactions as you like (ie, buy one and sell one share of the stock multiple times). However, you may not engage in multiple transactions at the same time (ie, you must sell the stock
before you buy again).
 这题。。是出了逗人玩的么。。可以买进卖出任意多次,那只要能收入就每天都买第二天就卖。。不就行了。。。

class Solution {
public:
int maxProfit(vector<int>& prices) {
int ans = 0;
for (int i = 1; i < prices.size(); ++i) {
ans += max(prices[i] - prices[i-1], 0);
}
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: