本文共 1316 字,大约阅读时间需要 4 分钟。
题目:
给出一组股票的价格,prices[i]代表第i天的股票价格,你能做多次买卖操作,但同时只能拥有一只股票,求出买卖股票的最大利润。
解答:
每次在谷底买入,在谷峰卖出,就可以获得最大利润。
先找出谷底,数组下标标记为买入buy, 同时sell = buy, 然后找出谷峰,标记为sell, 相减得出一次买卖的利润,重复直到数组结束。
代码:
class Solution { public: int maxProfit(vector &prices) { int size = prices.size(); if (size == 0) return 0; int buy = 0; int sell = 0; int i = 1; int sum = 0; while(i < size) { while (i < size && prices[i - 1] > prices[i]) ++i; if (i == size) //到达数组尾部,结束 break; else { buy = i - 1; //股票买入点 } sell = buy; //先令卖出点==买入点 while (i < size && prices[i - 1] <= prices[i]) //必须是<= 否则无法继续遍历。 ++i; sell = i - 1; //股票卖出点 sum += prices[sell] - prices[buy]; } return sum; } };
还有一个更简洁的代码:
http://jiyuede.blog.163.com/blog/static/3325192120121180646993/
题意:买卖股票的第二题。与1的变化在于可以买卖任意次数,但必须保证买卖一次后才能进行第二次。
class Solution {public: int maxProfit(vector &prices) { // Start typing your C/C++ solution below // DO NOT write int main() function int result = 0; int i = 0; int len = prices.size(); if(len<2) return 0; for(i=1;iprices[i-1]) { result += prices[i]-prices[i-1]; } } return result; }};
转载地址:http://sytsi.baihongyu.com/