Description: Say you have an array for which the i-th 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.
解题思路:
第一次解题时利用了循环嵌套,出现了Time Limit Exceeded。
第二次解题时,思路换为:遍历数组,找到第一个增区间,记录边界下标,并赋值给maxProfit;再找到第二个增区间的起点:若第二个增区间数值小于第一个,则边界下标更新。
Java-Solution
public class Solution {
public int maxProfit(int[] prices) {
int maxProfit = 0;
int minBoundary = 0;
int maxBoundary = 0;
for(int i = 1; i < prices.length; i++){
if(prices[i - 1] < prices[i]){
maxBoundary = i;
}
else{
if(prices[minBoundary] > prices[i]){
minBoundary = i;
}
maxBoundary = i;
}
if(prices[maxBoundary] - prices[minBoundary] > maxProfit){
maxProfit = prices[maxBoundary] - prices[minBoundary];
}
}
return maxProfit;
}
}