买卖股票最佳时期
tradtional two-point solution
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
Example:
输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票j价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。 随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 。
我的:
class Solution { func maxProfit(_ prices: [Int]) -> Int { var i = 0 // Slow point var pro = 0 if prices.count==0{ // in case []!! } else { for j in 1..<prices.count{ if (prices[j]-prices[i]>=0){ pro+=prices[j]-prices[i] } i+=1 } } return pro; } }
36 ms的解答
class Solution { func maxProfit(_ prices: [Int]) -> Int { if prices.count <= 1 { return 0 } var pre = prices[0] var res = 0 for cur in 1..<prices.count { let price = prices[cur] if price > pre { res += (price - pre) } pre = price } return res } }
优化
func maxProfit(_ prices: [Int]) -> Int { if prices.count == 0 { return 0} var pro = 0 for i in 1..<prices.count{ if (prices[i]-prices[i-1]>0){ pro+=prices[i]-prices[i-1] } } return pro; }
- 201 / 201 个通过测试用例
- 状态:通过
- 执行用时:48 ms
- 内存消耗:20.8 MB
Java 我的提交
class Solution { public int maxProfit(int[] prices) { int pro = 0; if (prices.length == 0) { } else{ for (int i=1;i<=prices.length;i++) { if (prices[i]-prices[i-1]>0){ pro+=prices[i]-prices[i-1]; } } } return pro; } }
- 201 / 201 个通过测试用例
- 状态:通过
- 执行用时:1 ms
- 内存消耗:42 MB