给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1: 输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。 示例 2: 输入: [1,2,3,4,5] 输出: 4 解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。 因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。 示例 3: 输入: [7,6,4,3,1] 输出: 0 解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。
指针的方式对比,
依次遍历 如果prePrice比nextPrice大的话,计算nextPrice 和 curPrice的差值,就是利润,同时把curPrice移动到nextPrice位置
代码(c#):
public class Solution { public int MaxProfit(int[] prices) { int curPriceIndex =0; int nextPriceIndex =0; int prePrices =0; int getValue =0; for(int i =1;i<prices.Length;i++) { prePrices=i-1; nextPriceIndex = i; if(prices[nextPriceIndex] < prices[prePrices]) { int min =prices[prePrices] - prices[curPriceIndex]; if(min<0) break; getValue+=min; curPriceIndex=nextPriceIndex; } } return getValue; } }运行结果 152ms,不是很省的样子,所以就去看了别人的解题思路。
Others: 不限制交易次数所以肯定是每天买了第二天卖,去掉所有负收益的交易后,就是最大收益。SO,一行代码解决问题。
return prices == null || prices.Length == 0 ? 0 : prices.Skip(1).Zip(prices, (p0, p1) => p0 - p1).Where(t => t > 0).Sum();看了一下运行结果:
腻害腻害~~~ 简单明了!
你们如果有好的思路欢迎讨论~~ 一起刷题呀~~ 欢迎一起交流 QQ群 :780697909
以上都是都是引用的leetcode网站内容,若有侵权联系我~