标签:style blog io color sp for div on log
这道题目比上一个稍微复杂点,答题思路是要分析价格的走势,找出每一阶段的波谷和波峰,求出每一阶段的利润,然后累加得出总利润。
需要预读下一个数字,判断价格的走向,如果之前在下降,现在上升了,则得到了波谷,如果之前上升,现在下降了,则得到了波峰,每次得到波峰就要累加一次利润,特别指出的是,有可能直到末尾之一都在上升,所以没法用“转折”法判断波峰,那么就要添加对结尾的判断,如果结尾了并且还是在上升,那么结尾的数字就按照波峰来计算。
第一次通过的代码是这样的:
1 public class Solution { 2 public int maxProfit(int[] prices) { 3 4 if(prices.length==0||prices.length==1){ 5 return 0; 6 } 7 8 int profit = 0; 9 boolean isup = prices[1] > prices[0]; 10 int down = isup ? prices[0] : 0;// 记录低谷 11 12 for (int i = 0; i < prices.length - 1; i++) { 13 if (prices[i] < prices[i + 1]) { 14 // 在上升 15 if (isup || i == prices.length - 2) { 16 // 如果这是一个上升过程中的一部分,但此时已经到达末尾,则最后一次计算profit,否则继续 17 if (isup == false) { 18 down = prices[i]; 19 } 20 if (i == prices.length - 2) { 21 profit = profit + prices[i + 1] - down; 22 } 23 } else { 24 // 如果这是一次从下降到上升的转折,则prices[i]是新的低谷,更新down数值,将isup设为true 25 down = prices[i]; 26 isup = true; 27 } 28 } else { 29 // 在下降 30 if (isup) { 31 // 如果这是上升过程中遇到的下降,则表明这是一个下降拐点,需要计算利润并累加 32 profit = profit + prices[i] - down; 33 isup = false; 34 } 35 } 36 } 37 38 return profit; 39 40 } 41 }
注意第16行代码那块很乱,经过整理,稍作修改,新的代码减少了4行代码,时间从488ms降低到460ms,得到的新代码如下:
1 public class Solution { 2 public int maxProfit(int[] prices) { 3 if ((prices.length == 0) || (prices.length == 1)) { 4 return 0; 5 } 6 7 int profit = 0; 8 boolean isup = prices[1] > prices[0]; 9 int down = isup ? prices[0] : 0; // 记录低谷 10 11 for (int i = 0; i < (prices.length - 1); i++) { 12 if (prices[i] < prices[i + 1]) { 13 // 在上升 14 if (!isup) { 15 // 如果这是一次从下降到上升的转折,则prices[i]是新的低谷,更新down数值,将isup设为true 16 down = prices[i]; 17 isup = true; 18 } 19 20 if (i == (prices.length - 2)) { 21 // 如果是到达末尾了,则累加利润 22 profit = (profit + prices[i + 1]) - down; 23 } 24 } else { 25 // 在下降 26 if (isup) { 27 // 如果这是上升过程中遇到的下降,则表明这是一个下降拐点,需要计算利润并累加 28 profit = (profit + prices[i]) - down; 29 isup = false; 30 } 31 } 32 } 33 34 return profit; 35 } 36 }
Best Time to Buy and Sell Stock II
标签:style blog io color sp for div on log
原文地址:http://www.cnblogs.com/bluedreamviwer/p/4084024.html