这道题比较简单,可以直接使用动态规划算法。具体解析过程可直接看代码,在代码注释中附录解析过程。
package likou;
/*
* 买卖股票的最佳时机
* 题干:
* 给定一个数组 prices,它的第i个元素prices[i]表示一支给定股票第 i天的价格
* 你只能选择某一天买入这只股票,并选择在未来的某一个不同的日子卖出该股票
* 设计一个算法来计算你所能获取的最大利润,如果不能获取利润返回0
*/
public class Demo121 {
/*
* 假设数组prices为[7,1,5,3,6,4],要想获利最大
* 假设第i天买入,第j天卖出(i<j<length-1),则要求prices[j]-prices[i]最大
* 即prices[j]最大,prices[i]最小
*/
public int maxProfit(int[] prices) {
int left = prices[0];
int priceDifference = 0;
for(int i=1;i<prices.length;i++) {
priceDifference = Math.max(prices[i]-left,priceDifference);
left = Math.min(left, prices[i]);
}
return priceDifference;
}
public static void main(String args[]) {
Demo121 demo = new Demo121();
int[] prices = {7,1,5,3,6,4};
System.out.println(demo.maxProfit(prices));
}
}