问题描述:
假设有一个数组,它的第i个元素是一支给定的股票在i天的价格如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润。样例,给出一个数组样例 [3,2,3,1,2], 返回 1。
解题思路:
1.要获得利润,必须使得选取的数组前一个元素小于后一个元素;
2.如果前一个大于后一个,就可跳出当前的循环,进入下一个;
3.用中间变量记录后一个元素与前一个元素之间的差值,记为temp;
4.用temp与初始化的max_pro比较大小,如果temp大于max_pro,就把temp赋值给它,最后返回max_pro。
易错点(需要考虑的特殊情况):
- 在嵌套for循环的时候,循环的次数没有搞清楚;
- 在前一个元素比后一个元素大而选择跳出循环时,没用continue,而使用了break;
- 不会去记录后一个元素与前一个元素的差值。
主要算法描述(伪代码):
Begin
0=>max_pro
For (m=0 to prices.length-1){
For (n=m+1 to prices.length ){
If prices[m]>prices[n] Then
Continue;
Else prices[n]-prices[m]=>temp
Endif
If max_pro<temp
Max_pro=>temp;
Endif
n+1=>n
}
m+1=>m }
print max_pro
End
代码如下:
1 public class Solution { 2 /** 3 * @param prices: Given an integer array 4 * @return: Maximum profit 5 */ 6 public int maxProfit(int[] prices) { 7 // write your code here 8 int max_pro = 0; 9 int temp; 10 for (int m = 0; m < prices.length-1; m++) { 11 for (int n = m + 1; n <prices.length; n++) { 12 if (prices[m] > prices[n]) 13 continue; 14 else 15 temp = prices[n] - prices[m]; 16 if(max_pro<temp) 17 max_pro = temp; 18 } 19 } 20 21 return max_pro; 22 } 23 }