Say you have an array for which the ith element is the price of a given stock on day i.
If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.
Example 1:
Input: [7, 1, 5, 3, 6, 4] Output: 5 max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)
Example 2:
Input: [7, 6, 4, 3, 1] Output: 0 In this case, no transaction is done, i.e. max profit = 0
只允许一次交易,算出最大利益。利益是卖的价格减去买的价格,卖在买后面。
这个题目的变形出现过:一个数组,0<=a<b<=n。。。a,b是数组的两个下标,b在后面。求num[b]-num[a]的最大值。跟这个题是一个意思。
依次遍历数组,每个元素跟它前面的最小值做差,会使得此元素的差值最大,然后找出最大差值就行。见代码。
class Solution { public int maxProfit(int[] prices) { if(prices==null||prices.length<2) return 0; int maxProfit=0; int min=prices[0]; for(int i=1;i<prices.length;i++){ if(prices[i]-min>maxProfit) maxProfit=prices[i]-min; if(min>prices[i])//找出当前元素前面的最小值,在一次遍历的时候就可以找出来了 min=prices[i]; } return maxProfit; } }