算法学习——leetcode122. 买卖股票的最佳时机 II
2019-03-10 11:13
295 查看
题目:
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
示例 1:
[code]输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
示例 2:
[code]输入: [1,2,3,4,5] 输出: 4 解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。 因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。
示例 3:
[code]输入: [7,6,4,3,1] 输出: 0 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
解题思路:
这道题是比较简单的贪心算法,寻找局部最优解,依次遍历,遍历到当前最低价,就买入,遍历到当前最高价,就卖出
但在提交中遇到了一个问题,就是要先判断数组的长度,若为空,就直接返回0;如果没有判断,直接遍历,就会出现下面的问题:
代码:
[code]class Solution { public: int maxProfit(vector<int>& prices) { int buy = -1; int sell = -1; int sum = 0; if(prices.size() == 0) return 0; for(int i=0;i<prices.size()-1;i++){ if((prices[i]<prices[i+1])&&(buy == -1)) buy = prices[i]; if((prices[i]>prices[i+1])&&(buy != -1)){ sell = prices[i]; sum += sell - buy; sell = -1; buy = -1; } } if((buy != -1)&&(sell == -1)){ sell = prices.back(); sum += sell - buy; sell = -1; buy = -1; } return sum; } };
参考:
https://www.geek-share.com/detail/2724416427.html
相关文章推荐
- 基础算法之买卖股票的最佳时机 II(Leetcode-122)
- LeetCode - 122. 买卖股票的最佳时机 II
- LeetCode 122. 买卖股票的最佳时机 II
- leetcode 122. 买卖股票的最佳时机 II
- LeetCode-122.买卖股票的最佳时机II(相关话题:贪心算法)
- 利用python 完成leetcode 122 买卖股票的最佳时机 II
- Leetcode122:买卖股票的最佳时机 II
- LeetCode 122. 买卖股票的最佳时机 II
- leetcode122. 买卖股票的最佳时机 II
- Java&LeetCode 初入门——122. 买卖股票的最佳时机 II
- [Leetcode]2018.3.22买卖股票的最佳时机 II
- LeetCode:买卖股票的最佳时机 II
- [LeetCode 122] - 买入与卖出股票的最佳时机II(Best Time to Buy and Sell Stock II)
- 买卖股票的最佳时机 II(设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易)
- 122. 买卖股票的最佳时机 II
- LeetCode 122 买卖股票的最佳时机2 Python
- Leetcode 买卖股票的最佳时机 II
- 【初级算法】2.买卖股票的最佳时机 II
- LeetCode(初级算法)数组篇--买卖股票的最佳时机 II c++
- leetcode-买卖股票的最佳时机 II